5

当我尝试跑步时

InvTotal = g.Sum(d => d.Field<double>("Total")) < 0 ? "W" : "N",我得到一个

Unable to cast object of type 'System.Double' to type 'System.String'错误。

我需要如何更改代码才能成功编译。

4

3 回答 3

10

我认为你需要正确的括号。

var InvTotal = (g.Sum(d => d.Field<double>("Total")) < 0) ? "W" : "N"

没有它们,编译器将0 ? "W" : "N"首先编译,其结果将用于比较。

有时,如果涉及到 ? 操作员。

于 2013-01-22T21:04:19.513 回答
1

InvTotal 的类型是什么?我猜它目前是双。如果您将类型更改为字符串,或者删除 InvTotal 的声明并将您的行更改为“var InvTotal = g.Sum ...”,则应该可以工作

于 2013-01-22T21:07:52.317 回答
0

我认为在这种情况下,括号没有问题。

问题是类型的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";
于 2013-01-22T21:40:44.983 回答