Передача данных из CSVReader в метод внутри цикла - PullRequest
1 голос
/ 26 октября 2019

У меня есть CSV со следующими данными

month,year,speed
12,2010,76
2,2000,45
12,1940,30

, и я загружаюсь с помощью стороннего производителя, который читает его. Короче говоря, это класс CSVReader, который может получать данные из файла с именем input следующим образом

List<Dictionary<string, object>> data = CSVReader.Read("input");

Затем, используя цикл for, я могу получить данныетаким образом

for(var i=0; i < data.Count; i++) {
    print ("month" + data[i]["month"] + " " +
           "year" + data[i]["year"] + " " +
           "speed " + data[i]["speed"]);
}

За исключением внутри цикла for, я хочу передать каждый год и месяц (один за другим) в другую функцию, которая принимает в качестве аргумента что-то вроде double (не объектов), и я не знаюкак

for(var i=0; i < data.Count; i++) {
    // Get month and year
    function(month, year);
}

1 Ответ

1 голос
/ 26 октября 2019

Если я правильно интерпретирую это, и ваш вопрос звучит так: «Как передать значение типа object в функцию, которая принимает параметр типа double?», То вы можете либо:
1)Приведите значение следующим образом:

for (var i = 0; i < data.Count; i++) {
    double month = (double)data[i]["month"];
    // Same for year.
    function(month, year);
}

Обратите внимание, что если преобразуемые значения не могут быть преобразованы к целевому типу (т. Е. Csv, который вы читаете, содержит несколько поврежденных строк), это приведет к исключениювыброшены. Если вы уверены, что это не будет проблемой, вы можете просто сделать это, однако, если вы хотите быть уверенным, вы можете воспользоваться опцией 2, которая
2). Используйте оператор as, как этот:

for (var i = 0; i < data.Count; i++) {
    double? month = data[i]["month"] as double?;
    if (!month.HasValue) {
        Console.WriteLine($"Month value on line {i + 1} is corrupted; Skipping...");
        break;
    }
    // Same for year.
    function(month.Value, year.Value);
}

В этом случае, если значение не относится к типу double, month будет присвоено значение null (поэтому мы используем тип nullable double?),Это позволяет проверить, успешно ли выполнено преобразование, не обрабатывая возможные исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...