繁体   English   中英

c#List.Exists返回true并带有“ false && true”

[英]c# List.Exists returns true with “false && true”

所以我当时正在研究程序,对Listoperator的行为有些困惑。 我有一个列表,想知道它是否根据某些条件保存条目。 现在,我们将其称为列表,并且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;
}))

在带有“ PropA.Equals ...”的第一行之后,b设置为false。 但是,超越界限的事实再次成为现实。 因此似乎有一个对象,即使没有。 我找到了解决方案,我将&&-Operator之后的第二行用括号括起来,但我仍然不知道为什么它会把一个错误变成一个真。

你能给我一个提示吗?

谢谢。

在表达中

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM