转换List< object>到对象的类:List
本文关键字:object List 对象 转换 | 更新日期: 2023-09-27 18:17:45
是否有可能将List<Document>
转换为Documents : List<Document>
类
例如,我有一个类看起来像这样:
public class Documents : List<Document>
{
}
但是我需要把我的List<Document>
转换成Documents
。
(由于缺乏这方面的信息,我认为这要么是不可能的,要么是我严重滥用了这些对象。
方法#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
我刚刚有了这个想法,你可以在你的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作为参数的构造函数)