?:LINQ中的条件运算符未按预期工作

时间:2012-04-17 20:21:34

标签: c# linq conditional conditional-operator

我遇到了一个LINQ查询问题,所以我在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 个答案:

答案 0 :(得分:8)

您的测试表达式是这样关联的:

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

而不是像这样:

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

答案 1 :(得分:2)

您看到的是运营商优先权。你可以解决这个问题:

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

&安培;&安培;优先级高于?:

答案 2 :(得分:1)

它计为(x == "3" && false) ? false : true,这就是为什么你有一个奇怪的行为。

答案 3 :(得分:0)

我怀疑你的lambda评估为(x == 3 && false) ? false : true,它将返回第一个元素,因为条件总是会计算为false。将括号括起来以获得更清晰的代码。