什麼是最好在C#中完成此操作的方法?從數組轉換爲ICollection <T>
回答
T的數組可以分配給T的ICollection,如T的一個實現T的IList。T的Tist自身擴展T的ICollection,因此您可以簡單地將一個數組分配給一個ICollection。
class Foo {}
Foo [] foos = new Foo [12];
ICollection<Foo> foo_collection = foos;
你是說,基本上,沒有必要*轉換*,因爲數組已經*是一個ICollection? – 2015-07-30 14:26:25
除了回答和評論,如果你想要去的其他方式,您使用的IEnumerable<T>
方法ToArray()
(其中ICollection<T>
從下降)。
簡短的回答:
使用ToList()。除非您知道以下內容並知道自己在做什麼,否則不要依賴T[]
指定給ICollection<T>
。
如果您需要它只讀,最好使用Array.AsReadOnly(T[])
並避免多餘的副本,並避免以下詳述的問題。
詳細答案:
儘管的T陣列(即T[]
)技術上實現IList<T>
(和ICollection<T>
和IEnumerable<T>
),它並不實際執行整個IList<T>
和ICollection<T>
接口,如上所述in the documentation:
...將數組轉換爲這些接口之一時要注意的關鍵是要添加,插入或移除元素的成員會拋出
NotSupportedException
。
換句話說,如果你只投數組ICollection<T>
你只要你調用任何上述方法得到NotSupportedException
。
所以要轉換陣列所安全到ICollection<T>
將創建新的對象,如使用的最佳方法Linq
的ToList()
:
T[] array;
// Will create a new list based on the current contents of the array
ICollection<T> collection = array.ToList();
這是一個更好的答案,接受並沒有真正提到鑄造到這些毫不在意的「危險」。 – 2016-02-03 10:03:01
因此,如果我知道我不打算修改集合,那麼投射ICollection
@DanielLorenz如果您希望它只讀,最好使用['Array.AsReadOnly(T [])'](https://docs.microsoft.com/zh-cn/dotnet/api/system)來強制執行。 array.asreadonly?視圖= netframework-4。7#System_Array_AsReadOnly__1 ___ 0___) – sinelaw 2018-01-09 08:51:11
- 1. 將ICollection <Interface>轉換爲ICollection <Class> [UWP] c#6.0
- 2. 自IEnumerable <IEnumerable的<string>>轉換爲ICollection的<T>
- 3. 將List <Keyvaluepair>轉換爲特定的ICollection類型C#
- 4. 將數組<CustomObject>轉換爲JSON
- 5. 從JSON轉換爲數組
- 6. 從數組轉換爲JSON
- 7. 從json轉換爲數組
- 8. 轉換的ICollection <T>列出<T>
- 9. 不能自ICollection轉換爲ICollection的C/CLI
- 10. 使用ICollection。轉換爲詞典
- 11. 如何轉換ICollection至IEnumerable?
- 12. 錯誤代碼爲什麼不能從ICollection <T>轉換爲列表<T>
- 13. 如何從ArrayList <int[]>轉換爲int數組?
- 14. webservice:將xml轉換爲php數組
- 15. 將u8數組的引用轉換爲<Vec<u8>>
- 16. 將IEnumerable <IGrouping<,>>轉換爲數組
- 17. laravel「<」轉換爲「<」
- 18. 將數組轉換爲數組數組
- 19. 從鍵/值轉換爲多維數組
- 20. 將數組從MATLAB轉換爲numpy
- 21. 將MongoCursor從 - > find()轉換爲數組
- 22. 從二維數組轉換爲矢量
- 23. 從POPEN輸出轉換爲數組
- 24. 將數組從鍵轉換爲無鍵
- 25. 從PHP數組轉換爲C#字典
- 26. 將數組從unsigned char *轉換爲char *
- 27. 將數組從PHP轉換爲C#
- 28. 從哈希映射轉換爲數組
- 29. IDictionary <string,IDictionary <string,ICollection <string> >>轉至LINQ
- 30. 將json轉換爲數組php將數組轉換爲字符串轉換
沒有轉換,T工具的數組ICollection。 –
Thorarin
2009-10-27 12:54:47
陣列不安全地執行'ICollection' - 參見[答案](http://stackoverflow.com/a/12100850/562906)。 –
sinelaw
2013-01-23 16:15:04