我有一个自定义列表,它MyList
是.List
.ToList()
.ToMyList()
如何实现 ToList() 方法?ToList() 的源代码是创建一个新的 List() 并将 IEnumerable 作为参数传入,但我不确定它的作用。
我有一个自定义列表,它MyList
是.List
.ToList()
.ToMyList()
如何实现 ToList() 方法?ToList() 的源代码是创建一个新的 List() 并将 IEnumerable 作为参数传入,但我不确定它的作用。
如果您的类是子类List<T>
,并且您提供了正确的构造函数,您应该能够:
MyList<MyType> list = new MyList<MyType>(theEnumerable);
如果您想要一个简单的扩展方法,类似于Enumerable.ToList
,您可以编写自己的:
public static MyList<T> ToMyList<T>(this IEnumerable<T> theEnumerable)
{
return new MyList<T>(theEnumerable);
}
然后您可以通过以下方式调用它:
var list = theEnumerable.ToMyList();
请注意,List<T>
一般来说,子类化确实不是一个好主意。如果您需要自定义集合,您应该真正考虑子类化Collection<T>
和实现。IList<T>
如果需要,您仍然可以提供相同的构造函数并使用上述方法填充自定义集合。
如果您有一个基类并且您能够将列表填充委托给它的构造函数,请执行以下操作:
public MyList(IEnumerable<MyType> items) : base(items) { }
否则,这个构造函数应该适用于几乎所有的集合类:
public MyList(IEnumerable<MyType> items)
{
if (items == null)
throw new ArgumentNullException("items");
foreach (var item in items)
Add(item);
}
然后你可以编写一个扩展方法,或者直接调用这个构造函数来从一个序列中填充一个新的列表。