当我尝试跑步时
InvTotal = g.Sum(d => d.Field<double>("Total")) < 0 ? "W" : "N"
,我得到一个
Unable to cast object of type 'System.Double' to type 'System.String'
错误。
我需要如何更改代码才能成功编译。
我认为你需要正确的括号。
var InvTotal = (g.Sum(d => d.Field<double>("Total")) < 0) ? "W" : "N"
没有它们,编译器将0 ? "W" : "N"
首先编译,其结果将用于比较。
有时,如果涉及到 ? 操作员。
InvTotal 的类型是什么?我猜它目前是双。如果您将类型更改为字符串,或者删除 InvTotal 的声明并将您的行更改为“var InvTotal = g.Sum ...”,则应该可以工作
我认为在这种情况下,括号没有问题。
问题是类型的InvTotal
,如果你写var InvTotal =....
一切都会好的。
对 Maarten 的解释:
在 C# 中,我们不能写这样的东西:
int x = 2;
var tmp = x ? "W" : "N";
如果我们尝试,我们将收到以下错误:
错误:“无法将类型 'int' 隐式转换为 'bool'”
C# 不是 C++,其中零表示假,非零值表示真。
所以你可以写这样的东西:
g.Sum(d => d.Field<double>("Total")) < 0 ? "W" : "N"
您还可以在三元运算符的第一部分有多个不带括号的逻辑运算符:
g.Sum(d => d.Field<double>("Total")) < 0 && 1 == 1 && 2 != 4 && 9 != 0 ? "W" : "N";