Я делаю что-то неправильно здесь, и, возможно, вы могли бы помочь.
Чего я пытаюсь достичь, так это:
- Прочитайте файл CSV (только одна строка, на основе идентификатора) и сопоставьте значения свойств с объектом.
- Обновите значения объекта.
- Запишите обновленные значения обратно в файл CSV.
Я могу выполнить первый и второй шаг.
Например, вот как я определяю объект, который сопоставляется с полями CSV:
public string Property1 { get; set; } = string.Empty;
public string Property2 { get; set; } = string.Empty;
public static CSVData ReadFromCSV(string line)
{
string[] values = line.Split(';');
CSVData csvValues = new CSVData();
csvValues.Property1 = values[0];
csvValues.Property2 = values[1];
return csvValues;
}
Затем я вызываю ReadFromCSVMethod следующим образом:
id = "123456";
var csvLine = File.ReadAllLines("C:\\test.csv")
.Skip(1)
.Select(line => CSVData.ReadFromCSV(line))
.Where(i => i.ID == id)
.ToList();
// update values
csvLine[0].Property1 = "foo";
csvLine[1].Property2 = "bar;
Я вижу обновленные значения в csvLine, когда смотрю на них.
Наконец, я пытаюсь пройтись по списку (csvList), взять значения и поставить точку с запятой между этими значениями:
var sb = new StringBuilder();
foreach (var item in csvList)
{
sb.Append(item);
}
Но тут я сталкиваюсь с проблемой. Когда я пытаюсь увидеть, что находится внутри StringBuilder, все, что я получаю, это имя объекта (CSVProcessor.CSVData), а не значения свойств:
var result = sb.ToString();
Почему это происходит?
Идея состоит в том, чтобы сформировать строку (новую строку), а затем сохранить ее в CSV.