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.Linq
moet 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 AddRange
om 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.