string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
यह काम नहीं करता है क्योंकि विभाजन विधि एक स्ट्रिंग लौटाती है []
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
यह काम नहीं करता है क्योंकि विभाजन विधि एक स्ट्रिंग लौटाती है []
जवाबों:
यहाँ यह करने का एक तरीका है:
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
List<int> TagIds = new List<int>(tags.Split(',').Select(int.Parse));
new List<>
?
ToList()
इसके बजाय कॉल कर सकते हैं ; परिणाम अनिवार्य रूप से एक ही है: List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
आपको एक या दूसरे को करने की आवश्यकता है, हालांकि, क्योंकि वापसी का मूल्य Select()
एक है IEnumerable<>
, लेकिन एक नहीं हैList<>
Select
में इस मामले में विस्तार लौटता है IEnumerable<Int32>
और यह सूची नहीं है। हालांकि सूची में एक रचनाकार है जो एक अन्य संग्रह को स्रोत के रूप में स्वीकार करता है।
Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries)
यदि आप कुछ सरल सत्यापन शामिल करना चाहते हैं और अमान्य मानों को छोड़ना चाहते हैं (अपवाद को फेंकने के बजाय), तो यहाँ कुछ है जो Tryadarar का उपयोग करता है:
string csv = "1,2,3,4,a,5";
int mos = 0;
var intList = csv.Split(',')
.Select(m => { int.TryParse(m, out mos); return mos; })
.Where(m => m != 0)
.ToList();
//returns a list with integers: 1, 2, 3, 4, 5
संपादित करें: यहां एंटोनी द्वारा प्रतिक्रिया के आधार पर एक अद्यतन क्वेरी है। यह किसी भी खराब मान को फ़िल्टर करने के लिए पहले TryParse को कॉल करता है, और फिर वास्तविक रूपांतरण करने के लिए पार्स करता है।
string csv = "1,2,3,4,a,5,0,3,r,5";
int mos = 0;
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out mos))
.Select(m => int.Parse(m))
.ToList();
//returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5
संपादित 2: C # 7.0 के लिए एक अद्यतन क्वेरी, चार्ल्स बर्न्स से प्रतिक्रिया के लिए धन्यवाद। ध्यान दें कि हम इस दृष्टिकोण के साथ अतिरिक्त मॉस चर से छुटकारा पा लेते हैं, इसलिए यह थोड़ा क्लीनर है।
string csv = "1,2,3,4,a,5,0,3,r,5";
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out _))
.Select(m => int.Parse(m))
.ToList();
int.TryParse(m, out int _)
आप LINQ w / int.Parse()
का उपयोग कर सकते हैं कन्वर्ट करने के string[]
लिए एक IEnumerable<int>
और फिर उस परिणाम को पास करने के लिए List<T>
:
var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));
थोड़ा LINQ एक लंबा रास्ता तय करता है:
List<int> TagIds = tags.Split(',')
.Select(t => int.Parse(t))
.ToList();
LINQ क्वेरी के बिना, आप इस विधि को चुन सकते हैं,
string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();
और फिर आप इस सूची को पूर्णांक प्रकार में परिवर्तित कर सकते हैं ...
.ToList<string>()
अभी भी ज़रूरत हैusing System.Linq;
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList();
.Select(x => x.Trim()
, आपको जोड़ने की आवश्यकता नहीं है , क्योंकि पार्स स्वचालित रूप से आपके लिए किसी भी स्थान वर्ण को ट्रिम कर देता है।
यदि आप C # 3.5 का उपयोग कर रहे हैं तो आप इसे प्राप्त करने के लिए Linq का उपयोग कर सकते हैं
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();
या छोटा वाला
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(int.Parse).ToList();
string tags = "9,3,12,43,2";
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
मैंने खालिद 13 के जवाब में संशोधन किया। यदि उपयोगकर्ता "0" की एक स्ट्रिंग लगाता है, तो उसका उत्तर परिणामी सूची से हटा देगा। मैंने कुछ ऐसा ही किया लेकिन एक अनाम वस्तु का इस्तेमाल किया।
var result = commaSeparatedString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(s => new { didConvert = int.TryParse(s.TrimNullProtection(), out convertedInt), convertedValue = convertedInt })
.Where(w => w.didConvert)
.Select(s => s.convertedValue)
.ToList();
TrimNullProtection एक कस्टम फ़ंक्शन है जो मैंने बनाया है, अगर स्ट्रिंग शून्य है तो सुरक्षा करता है।
उपरोक्त क्या है किसी भी तार को हटा दिया जाता है जो बिना किसी त्रुटि के परिवर्तित होने में सक्षम नहीं थे। यदि आपको रूपांतरण के साथ कोई समस्या थी, तो आपको त्रुटि की आवश्यकता है, तो स्वीकृत उत्तर को चाल करना चाहिए।
मैं इस पर अड़ गया और मैं बिना लाइनक के ही अपना समाधान साझा करना चाहता हूं। यह एक आदिम दृष्टिकोण है। सूची में गैर-पूर्णांक मान भी नहीं जोड़े जाएंगे।
List<int> TagIds = new List<int>();
string[] split = tags.Split(',');
foreach (string item in split)
{
int val = 0;
if (int.TryParse(item, out val) == true)
{
TagIds.Add(val);
}
}
उम्मीद है की यह मदद करेगा।
यह आसान है। पहले स्ट्रिंग को विभाजित करें। अल्पविराम (,) के बाद खाली स्थान ट्रिम करें। तब सिस्टम परिभाषित टोलिस्ट का उपयोग करें ()
string TradeTypeEnum = "Physical Deal, Physical Concentrate"
',' के बाद के स्थान को हटाने के लिए और इस अल्पविराम से अलग पाठ को सूची में बदलें
List<string> IDs = (TradeTypeEnum.Split(',')).Select(t => t.Trim()).ToList();