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

标签 c# list loops csv

我有一个包含以下数据的 CSV

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

我正在使用读取它的第 3 方加载。简而言之,它是一个 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);
}

最佳答案

如果我正确解释了这一点并且您的问题是:“如何将 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 值(这就是为什么我们使用可为 null 的 double? 类型)。这使您可以检查转换是否成功,而无需处理可能的异常。

关于c# - 将数据从 CSVReader 传递到循环内的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58570093/

相关文章:

c# - MVC 5 自定义用户存储

C# 如何将 system.windows.media.brush 转换为 system.drawing.brush

python - 如何将列表转换为具有数组中元素的特定顺序的数组

java - 给定极限内的数字 N 次方

performance - foreach %dopar% 比 for 循环慢

c# - Automapper:数组到对象的映射

c# - 两个流的条件配对 - 在响应式扩展中组合 If

r - 如何在R中的列表元素上应用均值函数

Python,复制具有不同值的 2 级列表结构

java - 在同一行上打印形状