Cách chia () một chuỗi được phân tách thành Danh sách <Chuỗi>


139

Tôi đã có mã này:

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

nhưng sau đó nghĩ rằng tôi có thể nên đi với một Danh sách thay thế. Nhưng mã này:

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

... mang đến cho tôi, " Không thể ngầm chuyển đổi loại 'chuỗi []' thành 'System.Collections.Generic.List' "

Câu trả lời:


320

string.Split()trả về một mảng - bạn có thể chuyển đổi nó thành một danh sách bằng cách sử dụng ToList():

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

Lưu ý rằng bạn cần nhập System.Linqđể truy cập .ToList()chức năng.


64
Có lẽ nên đề cập ở đây rằng bạn phải sử dụng không gian tên System.Linq
Dr. Cogent

3
@sairfanlistStrLineElements = line?.Split(',').ToList();
Vinigas

62

Sử dụng:

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

hoặc từ LINQ:

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

Hoặc thay đổi mã của bạn để không dựa vào việc triển khai cụ thể:

IList<string> list = array; // string[] implements IList<string>

11

Bao gồm sử dụng không gian tên System.Linq

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

bạn có thể sử dụng nó dễ dàng để lặp qua từng mục.

foreach(string str in stringList)
{

}

String.Split() trả về một mảng, do đó chuyển đổi nó thành một danh sách bằng cách sử dụng ToList()


6

Chỉ cần bạn có thể sử dụng với using System.Linq;

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

6

Hãy thử dòng này:

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

3

Điều này sẽ đọc một tệp csv và nó bao gồm một bộ chia dòng csv xử lý các dấu ngoặc kép và nó có thể đọc ngay cả khi excel mở nó.

    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;
    }

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

Sử dụng AddRangeđể vượt qua string[]và có được một danh sách chuỗi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.