走ろうとすると
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"
され、その結果が比較に使用されます。
時々、C#コンパイラは?に関しては少し助けが必要です。オペレーター。
InvTotalのタイプは何ですか?現在はダブルだと思います。タイプをStringに変更するか、InvTotalの宣言を削除して、行を「var InvTotal =g.Sum...」に変更すると機能するはずです。
この場合、括弧は問題ないと思います。
問題はタイプにあり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";