转换List< object>到对象的类:List

本文关键字:object List 对象 转换 | 更新日期: 2023-09-27 18:17:45

是否有可能将List<Document>转换为Documents : List<Document>

例如,我有一个类看起来像这样:

public class Documents : List<Document>
{
}

但是我需要把我的List<Document>转换成Documents

(由于缺乏这方面的信息,我认为这要么是不可能的,要么是我严重滥用了这些对象。

转换List< object>到对象的类:List<object>

方法#1

目前没有默认的内置方式将List<Object>转换为Objects : List<object>,但你可以克隆列表:

public static Documents CastToDocuments(this List<Document> docs)
{
    var toRet = new Documents();
    toRet.AddRange(docs);
    return toRet;
}

我也强烈建议阅读关于SO的另一个问题,这个问题已经问过为什么不从List继承?

方法# 2

我刚刚有了这个想法,你可以在你的Documents类中添加一个私有列表,并实现 basic list logic ToList()方法:

/// <summary>
/// Represents a list of documents.
/// </summary>
public class Documents
{
    /// <summary>
    /// Initialises the private list of documents.
    /// </summary>
    public Documents()
    {
        _docs = new List<Document>();
    }
    /// <summary>
    /// Add a speified document.
    /// </summary>
    /// <param name="doc">This document will be added to the saved documents.</param>
    public void Add(Document doc)
    {
        _docs.Add(doc);
    }
    /// <summary>
    /// Remove a specific document.
    /// </summary>
    /// <param name="doc">This document will be removed from the saved documents.</param>
    public void Remove(Document doc)
    {
        _docs.Remove(doc);
    }
    /// <summary>
    /// Removes all saved documents.
    /// </summary>
    public void Clear()
    {
        _docs.Clear();
    }
    /// <summary>
    /// "Casts" this instance to a list of documents.
    /// </summary>
    /// <returns>Returns all documents inside a list.</returns>
    public List<Document> ToList() => _docs;
    /// <summary>
    /// A list of documents.
    /// </summary>
    private readonly List<Document> _docs;
}

这看起来更好一些,因为有以下好处:

  • 一个很好的包装Document
  • 实际列表中的更多安全性
  • 更多列表控制
  • 只实现你真正需要的方法的能力
  • (如果您需要列表的功能,那么您仍然可以返回安全列表!)

一般不能将基类的对象转换为派生类,特别是不能将List<T>转换为MyType : List<T>

不改变设计的唯一选择是构造Documents的新实例并从原始list中复制add项到新实例(可能存在以list作为参数的构造函数)

相关文章: