簡體   English   中英

如何轉換IEnumerable <MyType> 進入MyList <MyType> ?

[英]How can I convert an IEnumerable<MyType> into a MyList<MyType>?

我有一個自定義列表MyList這是一個擴展List ,我有一個IEnumerable(或IQueryable的),我想要做的.ToList()但我猜, .ToMyList()

如何實現ToList()方法? ToList()的源代碼是創建一個新的List()並將IEnumerable作為參數傳遞,但是我不確定它會如何處理。

如果您的類繼承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> 您仍然可以提供相同的構造函數,並根據需要使用上述方法來填充自定義集合。

如果您有一個基類,並且能夠將列表填充委托給它的構造函數,請執行以下操作:

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

然后,您可以編寫擴展方法,或直接調用此構造函數以從序列中填充新列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM