У меня есть CSV со следующими данными (без заголовка)
12,2010,76.5
2,2000,45
12,1940,30.2
, и я читаю данные в List<List<object>>
.
Чтобы узнать, что в каждой строке истолбец / строка Я использую следующий цикл
List<List<object>> data = CSVReaderNoHeader.Read("input")
for (var i = 0; i < data.Count; i++)
{
double month = (double)(int)data[i][0];
print($"month:{month} ////END");
double year= (double)(int)data[i][1];
print($"year:{year} ////END");
double temperature= (double)data[i][2];
print($"temperature:{temperature} ////END");
}
Да, мне нужно создавать двойники, поэтому я распаковываю и кастую (может вместо этого использовать double.Parse
).
Я могу печатать месяц и год очень хорошо, но при достижении double temperature= (double)data[i][2];
выдает следующую ошибку
InvalidCastException: указанное приведение недействительно.
Я напечатал то, что находится в данных [i] [2] перед этой строкой (print(data[i][2]);
), просто чтобы посмотреть, все ли там в порядке и получил 76,5 , как и ожидалось. Затем протестировали также с использованием
double temperature= (double)(double)data[i][2];
double temperature= (double)(float)data[i][2];
(что, я думаю, не нужно было бы добавлять дополнительные (double) / (float)) и
object tempr = data[i][2];
double temperature;
temperature = (double)tempr;
, но проблема осталась. Итак, я продолжил и набрал print(data[i][2].GetType());
, чтобы посмотреть, может ли возвращаемый тип быть приведен к двойному. В результате я получил System.String .
Зная это, я попробовал методы double.TryParse, double.Parse и Convert.ToDouble, но ни один из них не работал
double.TryParse(data[i][2], out temperature);
Аргумент 1: невозможно преобразовать из «объекта» в строку.
double temperature = double.TryParse(data[i][2]);
Аргумент 1: невозможно преобразовать из «объекта» в строку.
double temperature = System.Convert.ToDouble(data[i][2]);
FormatException: входная строка была в неправильном формате.
Как тогда я должен ее привести?