c#List.Exists返回true,使用" false&&真"

时间:2016-12-16 14:23:52

标签: c# list boolean operator-keyword exists

所以我正在编写一个程序,对Listoperator的行为有点困惑。我有一个List,想知道它是否根据一些标准持有一个条目。 现在让我们将其称为List,obj具有以下属性:

public string PropA { get; set; }
public string PropB { get; set; }
public string PropC { get; set; }
public bool HasPropC { get; set; }

现在我只想要一个真实的结果,如果PropA等于列表中的一个,如果列表中的属性具有PropC,它应该检查PropC,否则检查PropB。 我用了这段代码:

 if (List.Exists(x => {
       bool b = true;

       b = b && x.PropA.Equals(obj.PropA);
       b = b && x.HasPropC ? x.PropC.Equals(obj.PropC) : x.PropB.Equals(obj.PropB);

       return b;
}))

第一行与#34; PropA.Equals ..." b被设置为false。但超越的界限再次成为现实。所以似乎有一个对象,即使它不是。我找到了一个解决方案,我将&& -Operator后面的第二行包装成括号,但我仍然不知道为什么它是由一个假的真实。

你能给我一个关于这个的提示吗?

感谢。

1 个答案:

答案 0 :(得分:6)

在表达式

b && x.HasPropC ? x.PropC.Equals(obj.PropC) : x.PropB.Equals(obj.PropB);

&&运算符优先于?:运算符。因此,当您对其进行评估时,b && x.HasPropC已评估为false,b已分配值x.PropB.Equals(obj.PropB)