我有一个自定义列表MyList
,它是List
的扩展名,我有一个IEnumerable(或IQueryable)我想要.ToList()
开启,但我猜,{ {1}}。
如何实现ToList()方法? ToList()的源代码是创建一个新的List()并将IEnumerable作为参数传递,但我不确定它对它的作用。
答案 0 :(得分:6)
如果您的班级是List<T>
和provide the correct constructor的子类,您应该能够:
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>
。如果需要,您仍然可以提供相同的构造函数并使用上述方法填充自定义集合。
答案 1 :(得分:0)
如果你有一个基类,并且你能够将列表填充委托给它的构造函数,那就这样做:
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);
}
然后你可以编写扩展方法,或者直接调用这个构造函数来填充序列中的新列表。