सबसे अच्छा रास्ता सी # में यह पूरा करने के क्या है सरणी से कन्वर्ट?ICollection को <T>
उत्तर
टी के एरेज़ टी के आईसीओलेक्शन के लिए असाइन किए जा सकते हैं, टी के एलीस्ट के रूप में टी के आईएलिस्ट टी टी के आईसीओलेक्शन को बढ़ाता है, ताकि आप केवल आईसीओलेक्शन में एक सरणी असाइन कर सकें।
class Foo {}
Foo [] foos = new Foo [12];
ICollection<Foo> foo_collection = foos;
क्या आप यह कह रहे हैं कि, मूल रूप से, * कन्वर्ट * की कोई आवश्यकता नहीं है क्योंकि ऐरे पहले से ही * एक आईसीओलेक्शन है? –
जवाब और टिप्पणी करने के लिए इसके अलावा, यदि आप अन्य रास्ता तय करना चाहते हैं, आप IEnumerable<T>
पर ToArray()
विधि (जो ICollection<T>
से उतरता है) का उपयोग करें।
लघु जवाब:
उपयोग ToList()। T[]
पर भरोसा न करें ICollection<T>
पर असाइन किए जा रहे हैं जब तक कि आप निम्न से अवगत न हों और जानें कि आप क्या कर रहे हैं।
यदि आपको इसे केवल पढ़ने की आवश्यकता है, तो Array.AsReadOnly(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();
यह बहुत बेहतर उत्तर है, स्वीकार किए बिना इन्हें बिना किसी देखभाल के "कास्टिंग" का उल्लेख नहीं किया जाता है। –
तो अगर मुझे पता है कि मैं संग्रह को संशोधित नहीं कर रहा हूं, तो आईसीओलेक्शन
@DanielLorenz अगर आप इसे केवल पढ़ने के लिए चाहते हैं, तो इसे बेहतर तरीके से लागू करना बेहतर है ['Array.AsReadOnly (T []) '] (https://docs.microsoft.com/en-us/dotnet/api/system। array.asreadonly? दृश्य = netframework -4।7 # System_Array_AsReadOnly__1 ___ 0___) – sinelaw
- 1. ICollection <T> .Contains
- 2. क्यों या ICollection <T>
- 3. परिवर्तित LINQ क्वेरी ICollection को
- 4. IEnumerable <IEnumerable <string>> से ICollection <T>
- 5. गैर सामान्य ICollection
- 6. टी? AddRange ICollection?
- 7. ICollection <T> क्यों लागू करता है दोनों IEnumerable <T> और IEnumerable
- 8. एक सूची <> एक ICollection <के रूप में निर्यात> एक्सएमएल
- 9. सूची <T> की बजाय ICollection <T> लौटने का वास्तविक लाभ क्या है?
- 10. सी # शब्दकोश के लिए फ्लैट सूची <T> विस्तृत <टी, ICollection <int>>
- 11. क्यों सूची <T> IList <T>, ICollection <T> और IEnumerable <T> को लागू करता है?
- 12. फ़ंक्शन पैरामीटर: IENumerable, ICollection या array?
- 13. IENumerable <T> या ICollection <T> बनाने के लिए सबसे आसान और सबसे कॉम्पैक्ट तरीका क्या है?
- 14. एक IEnumerable <T> या ICollection <T> रूप में एक आंतरिक सूची <T> लौटने के लिए ठीक?
- 15. IEQumerable <T> को दो बार
- 16. क्यों ArrayList IList, ICollection, IENumerable लागू करता है?
- 17. DOMDocument को <as & lt
- 18. स्टैक <T> आईसीओलेक्शन लागू करता है, लेकिन आईसीओलेक्शन <T>
- 19. आईसीओलेक्शन <string> स्ट्रिंग []
- 20. क्या आईसीओलेक्शन <T> एक ऑर्डर है?
- 21. सी #: शब्दकोश <K,V> कैसे हो सकता है Iollection <KeyValuePair <K,V>> बिना जोड़ें (KeyValuePair <K,V>) लागू करें?
- 22. आईसीओलेक्शन <T> वीएस सूची <T> इकाई फ्रेमवर्क
- 23. <% $, <% @, <% =, <% # ... सौदा क्या है?
- 24. किसी भी आईसीलेक्शन और आईसीओलेक्शन <T> प्रकार
- 25. <img> को डीओएम
- 26. Apache को <Location>
- 27. <hash></hash> को प्रारूप.एक्सएमएल
- 28. MyType <Foo> को MyType <IFoo>
- 29. कास्टिंग shared_ptr <T> shared_ptr को <void>
- 30. सूची <String> को शब्दकोश <int,String>
कोई रूपांतरण, टी औजार की एक सरणी है आईसीओलेक्शन। –
Thorarin
Arrays 'ICollection' सुरक्षित रूप से लागू नहीं करते हैं - देखें [उत्तर] (http://stackoverflow.com/a/12100850/562906)। –
sinelaw