将数据从CSVReader传递到循环内的方法

时间:2019-10-26 10:50:42

标签: c# list loops csv

我有一个包含以下数据的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循环中,我想每年和每月(一个接一个地)传递给另一个函数,该函数将doubles(不是对象)作为参数,而我不知道如何

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

1 个答案:

答案 0 :(得分:1)

如果我正确解释了这个问题,而您的问题是:“如何将类型为object的值传递给带有类型为double的参数的函数?”,那么您可以:< br /> 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的值(这就是为什么我们使用可为空的double?类型的原因)。这样一来,您无需处理可能的异常即可检查转换是否成功。