我有一个包含以下数据的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);
}
答案 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?
类型的原因)。这样一来,您无需处理可能的异常即可检查转换是否成功。