2011-11-08 16 views
13

मैं इस कोड है:समस्या मुसीबत। निर्धारित माप?

IList<string> stelle = stelleString.Split('-'); 

if (stelle.Contains("3")) 
    stelle.Add("8"); 

if (stelle.Contains("4")) 
    stelle.Add("6"); 

लेकिन लगता है IList एक .Split() के बाद एक निश्चित आकार है: System.NotSupportedException: संग्रह एक निश्चित आकार का था।

मैं इस समस्या को कैसे ठीक कर सकता हूं?

+1

'string.Split()' एक स्ट्रिंग सरणी देता है। Arrays निश्चित आकार के हैं, इसलिए आप जो अपवाद प्राप्त कर रहे हैं। – BoltClock

+0

यह .NET में बुरा डिजाइन फैसले की वजह से है: http://stackoverflow.com/questions/5968708/why-array-implements-ilist/5968798#5968798 – mbeckish

उत्तर

15

Split विधि एक सरणी देता है, और आप एक सरणी का आकार बदल नहीं सकते हैं।

आप ToList विस्तार विधि का उपयोग सरणी से एक List<string> बना सकते हैं:

IList<string> stelle = stelleString.Split('-').ToList(); 

या List<T> निर्माता:

IList<string> stelle = new List<string>(stelleString.Split('-')); 

इसके अलावा, आप शायद नहीं IList<T> इंटरफ़ेस का उपयोग करना चाहते हैं चर के प्रकार के रूप में, लेकिन केवल वस्तु के वास्तविक प्रकार का उपयोग करें:

string[] stelle = stelleString.Split('-'); 

या:

List<string> stelle = stelleString.Split('-').ToList(); 

यह आपको वास्तव में क्या वर्ग, कर सकते हैं IList<T> इंटरफ़ेस तक ही सीमित नहीं का उपयोग करते हैं, और कोई तरीकों कि समर्थित नहीं हैं।

+0

यह एक समस्या हो सकती है यदि stelleString है ""। मुझे इसे पकड़ने की कोशिश करनी चाहिए .... – markzzz

+1

@markzzz: यदि स्ट्रिंग में डिलीमीटर नहीं है, तो 'स्प्लिट' विधि मूल स्ट्रिंग वाले एक आइटम के साथ एक सरणी लौटाती है। यदि आप इसे अलग-अलग संभालना चाहते हैं, तो 'कोशिश करें ...पकड़ने में मदद नहीं करेगा, आपको सूची के 'गणना' की जांच करनी होगी। – Guffa

13

string.Split एक स्ट्रिंग सरणी देता है। यह वास्तव में एक निश्चित आकार होगा।

आप List<T> निर्माता के लिए परिणाम पारित करके एक List<string> को रूपांतरित कर सकते हैं:

IList<string> stelle = new List<string>(stelleString.Split('-')); 

या, यदि उपलब्ध हो, तो आप LINQ ToList() ऑपरेटर का उपयोग कर सकते हैं:

IList<string> stelle = stelleString.Split('-').ToList(); 
+1

ध्वनि System.Array IList वाक्य रचना लेकिन शब्दार्थ नहीं लागू करता है की तरह। दुर्भाग्य। –

2

कॉल ToList() परिणाम के लिए:

IList<string> stelle = stelleString.Split('-').ToList(); 
3

यह एक निश्चित आकार कारण string.Split एक स्ट्रिंग [] रिटर्न है। अतिरिक्त तत्व जोड़ने में सहायता के लिए आपको विभाजन की वापसी मान को < स्ट्रिंग > उदाहरण में विभाजित करने की आवश्यकता है।

0

String.split एक सरणी लौटाएं। लेकिन आप सरणी redimensionate कर सकते हैं। वीबी में यह

ReDim perserve myarray(newlength minus one) 
संबंधित मुद्दे