如何将IEnumerable <MyType>转换为MyList <MyType>?

Nib*_*Pig 1 c#

我有一个自定义List MyList是一个扩展List,我有一个IEnumerable(或IQueryable)我想做.ToList(),但我想,.ToMyList().

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

Ree*_*sey 6

如果您的类是子类List<T>,并且您提供了正确的构造函数,那么您应该能够:

MyList<MyType> list = new MyList<MyType>(theEnumerable);
Run Code Online (Sandbox Code Playgroud)

如果你想要一个类似的简单扩展方法Enumerable.ToList,你可以编写自己的:

public static MyList<T> ToMyList<T>(this IEnumerable<T> theEnumerable)
{
    return new MyList<T>(theEnumerable);
}
Run Code Online (Sandbox Code Playgroud)

然后你可以通过以下方式调用:

var list = theEnumerable.ToMyList();
Run Code Online (Sandbox Code Playgroud)

请注意,子类化List<T>通常不是一个好主意.如果您需要自定义集合,则应该考虑子类化Collection<T>和实现IList<T>.如果需要,您仍然可以提供相同的构造函数并使用上述方法填充自定义集合.

  • *"如果你的类继承了`List <T>`"* - 并且我们希望情况并非如此,因为从`List <T>`派生出来是一个糟糕的主意. (4认同)