Hoe splits() een gescheiden string naar een List<String>

Ik had deze code:

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

maar toen bedacht ik me dat ik misschien beter voor een lijst moest gaan. Maar deze code:

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

…geeft me, “Kan type ‘string[]’ niet impliciet converteren naar ‘System.Collections.Generic.List’


Antwoord 1, autoriteit 100%

string.Split()retourneert een array – u kunt deze converteren naar een lijst met ToList():

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

Houd er rekening mee dat u System.Linqmoet importeren om toegang te krijgen tot de functie .ToList().


Antwoord 2, autoriteit 17%

Ofwel:

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

of van LINQ:

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

Of verander uw code om niet te vertrouwen op de specifieke implementatie:

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

Antwoord 3, Autoriteit 3%

opnemen met behulp van naamruimte System.Linq

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

U kunt er gemakkelijk gebruik van maken voor het herhalen van elk item.

foreach(string str in stringList)
{
}

String.Split()Retourneert een array, converteer het daarom naar een lijst met ToList()


Antwoord 4, Autoriteit 2%

Probeer deze regel:

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

Antwoord 5, Autoriteit 2%

U kunt gewoon gebruiken met using System.Linq;

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

Antwoord 6

Hiermee wordt een CSV-bestand gelezen en bevat een CSV-lijnsplitser die dubbele aanhalingstekens behandelt en het kan lezen, zelfs als Excel het open heeft.

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

Antwoord 7

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

Gebruik AddRangeom string[]door te geven en een stringlijst te krijgen.


Antwoord 8

Ik gebruik deze extensiemethode die null-invoer verwerkt en ook de overtollige witruimtenverwijdert.

public static List<string> CsvToList(this string csv)
{
    if (string.IsNullOrEmpty(csv))
    {
        return new List<string>();
    }
    return csv.Split(',').Select(item => item.Trim()).ToList();
}

Merk op dat als de invoer CSV is: “Apple, Orange, Pear”, we de witte spaties na de komma’s willen verwijderen.

Other episodes