4

LINQ クエリの 1 つに問題があるため、LINQPad で簡単なバージョンを作成して支援しました。問題は、なぜそれがまだ私がすべきだと思っていることをまだ行っていないのか理解できないことです...

var list = "1 2 3 4".Split();
var result = list.FirstOrDefault(x =>
                    x == "3"
                    && true);
result.Dump();

これは3、想定どおりに を返します。
ただし、これを実行すると:

var list = "1 2 3 4".Split();
var result = list.FirstOrDefault(x =>
                    x == "3"
                    && false ? false : true);

私は1戻ってきます。最後の行は、実際のコードを簡略化したものです。どちらの例もtrue最終行で返されるはず3ですが、条件演算子を使用したクエリはそこにねじれを投げています。

私は何が欠けていますか?

4

4 に答える 4

8

テスト式は次のように関連付けられています。

(x == "3" && false) ? false : true

このような代わりに:

x == "3" && (false ? false : true)
于 2012-04-17T20:23:23.370 に答える
2

表示されているのは、演算子の優先順位によるものです。あなたの修正は、条件を括弧で囲むことです:

x == "3" && (false ? false : true)

&& は ? より優先度が高い:

于 2012-04-17T20:23:55.063 に答える
1

それ(x == "3" && false) ? false : trueがあなたが奇妙な行動をする理由です。

于 2012-04-17T20:23:47.920 に答える
0

(x == 3 && false) ? false : true条件は常に false と評価されるため、ラムダが最初の要素を返すと評価されると思われます。より明確なコードのために括弧を入れてください。

于 2012-04-17T20:28:24.943 に答える