Видимо, ваша проблема в том, что вы хотите присвоить значение amount
string []values = csvLine.Split(',');
double amount = Convert.ToDouble(values[6]);
Конечно, вы отлаживали код.Что вы видели в качестве значения для values[6]
?
Из ваших примеров строки csv это выглядит примерно так: "\"90230.00\""
Так что это строка, начинающаяся и заканчивающаяся строковой кавычкой.Невозможно преобразовать это значение в двойное.
Решение простое: убрать строковые кавычки в начале и конце этого значения.
amount = Double.Parse(value[6].SubString(1, value[6].Length-2));
Кстати,Вы хотите, чтобы employeeName
(и все остальные) были строкой SAMPLENAME или должны быть заключены в кавычки: "SAMPLENAME" (так внутренне "\" SAMPLENAME \ "")?
Если вы хотите удалитьэти начальные и конечные строковые кавычки из всех ваших значений, рассмотрите возможность создания функции расширения для строк.См. Расширение методов расширения:
public static IEnumerable<string> SplitAndRemoveQuotes(this string string)
{
// TODO: handle null string
var splitValues = string.Split(',');
foreach(string splitValue in splitValues)
{
// if you are certain every split value starts and ends with string quote
// TODO: throw exception if not start/end with string quote?
yield return splitValue.SubString(1, splitValue.Length-2);
}
}
Так что, если ваша строка имеет формат "\" \ "\" ", (в читаемом формате:" "") возвращаемое значение будет строкойтолько с одной цитатой (")
Использование:
public static Loan fromCVS(string csvLine)
{
// TODO: exception if csvLine null or empty
var splitWithoutQuotes = csvLine.SplitAndRemoveQuotes()
.Skip(2) // we don't need the first two values
.Take(5) // we only need the next five values
.ToList();
// TODO: exception if result not 5 items
return new Loan
{
employeNames = splitWithoutQuotes[0],
...
amount = Double.Parse(values[4]);
...
};
}