C# 如何转换IEnumerable<;MyType>;成为MyList<;MyType>;?

C# 如何转换IEnumerable<;MyType>;成为MyList<;MyType>;?,c#,C#,我有一个自定义列表MyList,它是List的扩展,我还有一个IEnumerable(或IQueryable),我想在上面执行.ToList(),但我想,.ToMyList() 如何实现ToList()方法?ToList()的源代码是创建一个新的List()并将IEnumerable作为参数传入,但我不确定它的作用。如果您的类子类List,并且您可以: MyList<MyType> list = new MyList<MyType>(theEnumerable); 然后

我有一个自定义列表
MyList
,它是
List
的扩展,我还有一个IEnumerable(或IQueryable),我想在上面执行
.ToList()
,但我想,
.ToMyList()


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

如果您的类子类
List
,并且您可以:

MyList<MyType> list = new MyList<MyType>(theEnumerable);
然后,您可以通过以下方式进行呼叫:

var list = theEnumerable.ToMyList();

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

如果您的类子类
列表
,您应该能够:

MyList<MyType> list = new MyList<MyType>(theEnumerable);
然后,您可以通过以下方式进行呼叫:

var list = theEnumerable.ToMyList();

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

如果您有一个基类,并且能够将列表填充委托给其构造函数,请执行以下操作:

public MyList(IEnumerable<MyType> items) : base(items) { }
公共MyList(IEnumerable项):基本(项){ 否则,此构造函数几乎适用于任何集合类:

public MyList(IEnumerable<MyType> items)
{
    if (items == null)
        throw new ArgumentNullException("items");

    foreach (var item in items)
        Add(item);
}
公共MyList(IEnumerable项)
{
if(items==null)
抛出新的异常(“项目”);
foreach(项目中的var项目)
增加(项目);
}

然后,您可以编写扩展方法,或直接调用此构造函数以从序列填充新列表。

如果您有一个基类,并且能够将列表填充委托给其构造函数,请执行以下操作:

public MyList(IEnumerable<MyType> items) : base(items) { }
公共MyList(IEnumerable项):基本(项){ 否则,此构造函数几乎适用于任何集合类:

public MyList(IEnumerable<MyType> items)
{
    if (items == null)
        throw new ArgumentNullException("items");

    foreach (var item in items)
        Add(item);
}
公共MyList(IEnumerable项)
{
if(items==null)
抛出新的异常(“项目”);
foreach(项目中的var项目)
增加(项目);
}

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

它将它和ads元素枚举到列表中。如何创建MyList,它是否有任何
add
方法?它将它和ads元素枚举到列表中。如何创建MyList,它是否有任何
add
方法?“如果你的类子类是
List
”——我们希望不是这样,因为从
List
派生是一个糟糕的想法。@cdhowie是的,我完全同意-但是,OP声明“List MyList是List的扩展“,这表明这就是正在做的事情。@cdhowie我刚刚编辑的内容是为了说明这也不是一个好的方法。我的大脑完全崩溃了,我的问题可能是错的,我的列表实际上是在扩展BindingList。我不明白你的答案,也不明白作为构造器应该放什么。您似乎已经展示了解决方案的用例,但没有展示解决方案本身?@ReedCopsey谢谢,现在我觉得很舒服了。:)“如果你的类子类是
List
”——希望不是这样,因为从
List
派生是一个糟糕的想法。@cdhowie是的,我完全同意-但是,OP声明了“List MyList是List的扩展”,这表明这就是正在做的事情。@cdhowie我刚刚编辑的内容是为了说明这也不是一个好的方法。我的大脑完全崩溃了,我的问题可能是错的,我的列表实际上是在扩展BindingList。我不明白你的答案,也不明白作为构造器应该放什么。您似乎已经展示了解决方案的用例,但没有展示解决方案本身?@ReedCopsey谢谢,现在我觉得很舒服了。:)