2012-02-13 7 views
82

को विभाजित करने के लिए() एक सीमांकित स्ट्रिंग मैं इस कोड था:कैसे एक सूची <String>

String[] lineElements;  
    . . . 
    try 
    { 
     using (StreamReader sr = new StreamReader("TestFile.txt")) 
     { 
      String line; 
      while ((line = sr.ReadLine()) != null) 
      { 
       lineElements = line.Split(','); 
       . . . 

लेकिन फिर सोचा कि मैं शायद बजाय एक सूची के साथ जाना चाहिए। लेकिन इस कोड:

List<String> listStrLineElements; 
    . . . 
    try 
    { 
     using (StreamReader sr = new StreamReader("TestFile.txt")) 
     { 
      String line; 
      while ((line = sr.ReadLine()) != null) 
      { 
       listStrLineElements = line.Split(','); 
. . . 

... मेरे देता है, "परोक्ष परिवर्तित प्रकार 'स्ट्रिंग []' 'System.Collections.Generic.List' के लिए नहीं किया जा सकता"

उत्तर

183

string.Split() रिटर्न एक सरणी - आप ToList() का उपयोग कर एक सूची में परिवर्तित कर सकते हैं:

listStrLineElements = line.Split(',').ToList(); 

आप .ToList() फ़ंक्शन का उपयोग करने के System.Linq आयात करने के लिए की जरूरत है।

+46

शायद यहां उल्लेख करना चाहिए कि आपको नेमस्पेस सिस्टम का उपयोग करना होगा। लिंकक –

47

या तो उपयोग:

List<string> list = new List<string>(array); 

या LINQ से:

List<string> list = array.ToList(); 

या अपने कोड वें पर भरोसा नहीं करने के लिए बदल ई विशिष्ट कार्यान्वयन:

IList<string> list = array; // string[] implements IList<string> 
1
string[] thisArray = myString.Split('/');//<string1/string2/string3/--->  
List<string> myList = new List<string>(); //make a new string list  
myList.AddRange(thisArray);  

उपयोग AddRangestring[] गुजरती हैं और एक स्ट्रिंग सूची प्राप्त करने के।

8

नाम स्थान System.Linq

List<string> stringList = line.Split(',').ToList(); 

का उपयोग कर आप प्रत्येक आइटम के माध्यम से पुनरावृत्ति के लिए आसानी से यह का उपयोग कर सकते शामिल करें।

foreach(string str in stringList) 
{ 

} 

String.Split() एक सरणी देता है, इसलिए ToList()

1

का उपयोग कर यह एक csv फ़ाइल पढ़ा जाएगा एक सूची में बदलने और यह एक csv लाइन विभाजक कि दोहरे उद्धरण चिह्नों संभालती भी शामिल है और यदि एक्सेल यह है तो यह और भी पढ़ सकते हैं खुला।

public List<Dictionary<string, string>> LoadCsvAsDictionary(string path) 
    { 
     var result = new List<Dictionary<string, string>>(); 

     var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
     System.IO.StreamReader file = new System.IO.StreamReader(fs); 

     string line; 

     int n = 0; 
     List<string> columns = null; 
     while ((line = file.ReadLine()) != null) 
     { 
      var values = SplitCsv(line); 
      if (n == 0) 
      { 
       columns = values; 
      } 
      else 
      { 
       var dict = new Dictionary<string, string>(); 
       for (int i = 0; i < columns.Count; i++) 
        if (i < values.Count) 
         dict.Add(columns[i], values[i]); 
       result.Add(dict); 
      } 
      n++; 
     } 

     file.Close(); 
     return result; 
    } 

    private List<string> SplitCsv(string csv) 
    { 
     var values = new List<string>(); 

     int last = -1; 
     bool inQuotes = false; 

     int n = 0; 
     while (n < csv.Length) 
     { 
      switch (csv[n]) 
      { 
       case '"': 
        inQuotes = !inQuotes; 
        break; 
       case ',': 
        if (!inQuotes) 
        { 
         values.Add(csv.Substring(last + 1, (n - last)).Trim(' ', ',')); 
         last = n; 
        } 
        break; 
      } 
      n++; 
     } 

     if (last != csv.Length - 1) 
      values.Add(csv.Substring(last + 1).Trim()); 

     return values; 
    } 
3

बस यू using System.Linq;

List<string> stringList = line.Split(',')  // this is array 
.ToList();  // this is a list which you can loop in all split string 
2

के साथ) का उपयोग कर सकते सूची stringList = line.Split कोशिश (',') ToList (।;