我使用擴展方法OrderBy和ThenBy在多個字段上對自定義集合進行排序。這種排序不會影響集合,而是返回並且IEnumberable。我無法將IEnumerable結果投射到我的自定義集合中。無論如何改變我的集合的順序或將IEnumerable結果轉換爲我的自定義集合?如何將IEnumerable轉換爲C#中的自定義類型?
回答
如果您收藏類型實現IList<T>
(要能Add()
它),你可以寫一個擴展方法:
public static Extensions
{
public static TColl ToTypedCollection<TColl, T>(this IEnumerable ien)
where TColl : IList<T>, new()
{
TColl collection = new TColl();
foreach (var item in ien)
{
collection.Add((T) item);
}
return collection;
}
}
不,沒有。在使用查詢操作符時,它不會使用原始集合的實例來生成枚舉。相反,它使用私有實現(可能是匿名的,可能不是)來提供此功能。
如果你想它原來的集合中,你應該有這需要一個IEnumerable<T>
(或任何您的收藏店,如果它是具體的),然後通過查詢構造類型的構造函數。
然後,您可以使用它來創建IEnumerable<T>
稱爲To<YourCollectionType>
擴展方法,其將採取IEnumerable<T>
,然後把它傳遞給你的類型的構造函數和返回。
不可以。您可以按照ToList和ToDictionary擴展方法建立的模式 - 編寫一個類似的擴展方法來從IEnumerable中加載自己的集合類型。
您可以編寫您自己的IComparer實例,以便能夠對自定義收集進行排序。
蠻力,你可以通過IEnumerable循環,並將每個項目轉儲回您的自定義集合的新實例。
您可以IEnumerable的初始化列表:
如果項目是IEnumerable類型,你可以創建像這樣的列表:
var list = new List<string>(items);
,或者你可以簡單地調用items.ToList( ):
var list = items.ToList();
您的自定義集合實現了哪些接口?
如果一個IList那麼你可以在IEnumerable的 做.ToList()如果一個IDictionary那麼你可以在IEnumerable的 等做.ToDictionary()..
將它帶給更適合你的東西。
如果沒有類似的東西,你可以爲IEnumerable編寫擴展方法爲.ToMyCollection()。
枚舉和集合是相當不同的野獸。
枚舉只允許枚舉集合具有基於索引的訪問器,計數屬性等。要創建一個集合,你實際上必須枚舉IEnumerable。像列表<T>典型的集合將有一個接受IEnumerable的構造函數。儘管如此,枚舉仍將執行。
如果你看看System.Linq。枚舉類有
var myEnumerable = this.GetEnumerator();
var array = myEnumerable.ToArray();
var list myEnumerable.ToList();
你可以按照這個方法,並創建一個自定義的擴展方法,將轉換到您的自定義集合的幾個擴展方法,將aloow你給你的IEnumerable類型轉換到任何一個數組,ToList
public static CustomCollection<TSource> ToCustomCollection<TSource>(this IEnumerable<TSource> source);
LINQ很酷,因爲它把源的集合像這樣爲永恆不變的 - 它不修改它們。使用擴展方法只需按照您指定的替代順序枚舉它們即可 - 您不是以這種方式構建新的自定義列表。
我建議兩個選項:
- 構建基於對您的LINQ-ING
- 實現排序功能集成到您的自定義集合的結果的新列表自己(或使用一個很好的排序泛型集合作爲基地),所以它可以就地排序。
你真的需要一個定製的集合類型呢?這聽起來像你想要做的一切都是由現有的泛型集合類型提供的,也許你只需要添加一個擴展方法或爲他們。
- 1. 類型轉換爲自定義類 - C++
- 2. Visual C#將自定義IEnumerable轉換爲字符串[]
- 3. 如何將字符串轉換爲自定義數據類型
- 4. 如何將XNode轉換爲自定義類型?
- 5. Haskell Aeson:如何將值轉換爲自定義類型?
- 6. 如何將自定義類型轉換爲字符串?
- 7. 使用轉換將字符串轉換爲自定義類型
- 8. 將自定義類型轉換爲基類型
- 9. C++定義類型轉換
- 10. 無法將IEnumerable的匿名類型轉換爲IEnumerable <dynamic>?
- 11. InvalidCastException當轉換爲定義類型C#
- 12. 如何將我的自定義類轉換爲iOS中的自定義框架?
- 13. 如何在C#中定義自定義泛型轉換器
- 14. 如何將NumPy數據類型轉換爲自定義數據類型?
- 15. 如何將自定義對象轉換爲Objective C中的NSString?
- 16. 如何將XML轉換爲c中的自定義對象#
- 17. C++ - 從自定義類轉換爲內建類型
- 18. IEnumerable的類型轉換
- 19. 如何將Object []類型轉換爲用戶自定義的陣列型
- 20. 將自定義類型轉換爲.NET庫類
- 21. 在Swift中爲自定義類型定義顯式轉換
- 22. 將自定義類型從VB6轉換爲C#中的List <>?
- 23. 將Fortran用戶定義類型轉換爲C++類
- 24. 如何將查詢結果中的對象轉換爲自定義類型
- 25. 如何將自定義類型轉換爲VS2012中的字符串?
- 26. 將VB轉換爲C#類型轉換
- 27. 將字符串轉換爲自定義類型的Haskell
- 28. 在PHP中轉換爲自定義類的類型
- 29. 如何綁定自定義類型的集合(IEnumerable)?
- 30. 如何將字符串類型轉換爲用戶定義的自定義類型
或鑄造操作者,對於這種情況似乎更好。 – Dykam 2009-07-13 21:28:36
錯字:鑄造操作員 – Dykam 2009-07-13 21:29:12