如何将IEnumerable <mytype>转换为MyList <mytype>?</mytype> </mytype>

时间:2012-09-21 15:58:22

标签: c#

我有一个自定义列表MyList,它是List的扩展名,我有一个IEnumerable(或IQueryable)我想要.ToList()开启,但我猜,{ {1}}。

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

2 个答案:

答案 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);
}

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