1

我有一个自定义列表,它MyList是.List.ToList().ToMyList()

如何实现 ToList() 方法?ToList() 的源代码是创建一个新的 List() 并将 IEnumerable 作为参数传入,但我不确定它的作用。

4

2 回答 2

6

如果您的类是子类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>如果需要,您仍然可以提供相同的构造函数并使用上述方法填充自定义集合。

于 2012-09-21T16:00:42.620 回答
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);
}

然后你可以编写一个扩展方法,或者直接调用这个构造函数来从一个序列中填充一个新的列表。

于 2012-09-21T16:08:35.720 回答