[英]lambda expression to simple c#
嗨,我正在尝试更正代码,但遇到了 lambda 表达式。
addrow.Outcome1 = values.Where(row => DecompRowComparer(row, filterstring1))
.ToList()
.Sum(row => Convert.ToDouble(row[outcomeIndex]));
谁能帮我把这个表达式翻译成一个简单的 c# 代码。
我想检查 row[outcomeIndex] 是否只有一个字母,如果它只有一个字母并且是 a.(dot) 那么我想用 0 替换它,但我不知道该怎么做
row[outcomeIndex] 可以是数字,也可以是 a.(dot),这一行给出错误:输入字符串的格式不正确。 当 row[outcomeIndex] 为 a.(dot) 时,如何将这一行转换为简单的方式(多行)
这是不使用 Linq 的代码
double sum = 0;
foreach(var row in values)
{
if(DecompRowComparer(row, filterstring1))
{
sum += Convert.ToDouble(row[outcomeIndex])
}
}
addrow.Outcome1 = sum;
这是简单的 LINQ 代码。 将其转换为循环会复杂得多。 ToList()
在这里是多余的,因为Sum
适用于任何 IEnumerable。
而不是使用Convert.ToDouble
使用double.TryParse ,它允许您控制如果解析失败会发生什么。
double.TryParse
如果成功则返回 true,否则返回 false。 解析的双精度作为输出变量返回。 您可以将其与三元运算符结合使用,以在成功时返回解析值,或在失败时返回 0 或任何其他默认值。
三元运算符(condition)? trueExpression:falseExpression
(condition)? trueExpression:falseExpression
检查条件,如果条件为真则返回falseExpression
的结果,如果为假则返回 falseExpression。
将两者放在一起:
var value=double.TryParse(someString,out var result) ? result : 0;
如果someString
是13
解析成功并且result
设置为13
。 如果它包含.
,解析失败, ?:
表达式的第二个分支返回 0;
查询可以重写为:
addrow.Outcome1 = values.Where(row => DecompRowComparer(row, filterstring1))
.Sum(row=>double.TryParse(row[outcomeIndex],out var d)?d:0)
或者
addrow.Outcome1 = values.Where(row => DecompRowComparer(row, filterstring1))
.Select(row=>row[outcomeIndex])
.Sum(input=>double.TryParse(input,out var d)?d:0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.