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"され、その結果が比較に使用されます。

時々、C#コンパイラは?に関しては少し助けが必要です。オペレーター。

于 2013-01-22T21:04:19.513 に答える
1

InvTotalのタイプは何ですか?現在はダブルだと思います。タイプをStringに変更するか、InvTotalの宣言を削除して、行を「var InvTotal =g.Sum...」に変更すると機能するはずです。

于 2013-01-22T21:07:52.317 に答える
0

この場合、括弧は問題ないと思います。

問題はタイプにありInvTotalます、あなたが書くならばvar InvTotal =....すべてが大丈夫でしょう。

マールテンの答えへの説明:

C#では、次のようなものを書くことはできません。

int x = 2;
var tmp = x ? "W" : "N";

試してみると、次のエラーが発生します。

エラー:「タイプ'int'を'bool'に暗黙的に変換できません」

C#はC ++ではありません。ゼロはfalseを示し、ゼロ以外の値はtrueを示します。

したがって、次のように書くことができます。

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 に答える