将List <object>转换为Objects类:List <object>

时间:2016-11-12 04:50:13

标签: c#

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

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

public class Documents : List<Document>
{

}

但我需要将List<Document>转换为Documents

(缺乏相关信息让我相信这是不可能的,或者我严重误用了这些物品。

2 个答案:

答案 0 :(得分:1)

方法#1

目前没有默认的内置方式可以将List<Object>投射到Objects : List<object>,但您可以kind of clone列表:

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

我还强烈建议您阅读另一个已经问过Why not inherit from List<T>?

的问题

方法#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
  • 的精美包装器
  • 实际列表中的更多安全性
  • 更多控制列表
  • 只能实现您真正需要的方法的能力
  • (如果您需要列表的功能,那么您仍然可以返回安全列表!)

答案 1 :(得分:0)

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

不改变设计的唯一选择是构造Documents的新实例并将原始列表中的项添加到该新实例(可能存在将列表作为参数的构造函数)。