c# List.Exists 返回 true "false && true"

标签 c# list boolean operator-keyword exists

所以我正在编写一个程序,对 Listoperator 的行为有点困惑。我有一个列表,想知道它是否包含符合某些标准的条目。 现在我们称它为 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;
}))

在第一行“PropA.Equals...”之后,b 被设置为 false。但是超越的线再次使它成为现实。所以看起来好像有一个对象,即使它不是。我找到了解决方案,我将 &&-Operator 之后的第二行括在方括号中,但我仍然不知道为什么它会把 false 变成 true。

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

谢谢。

最佳答案

在表达式中

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

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

关于c# List.Exists 返回 true "false && true",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41186433/

相关文章:

c# - 如何获取绑定(bind)对象的属性?

c# - 如何从非常大的列表中按索引有效地删除元素?

java - 使用 getClass() 获取类时编译错误

python根据第0行值范围选择列

indexing - Julia:通过多个 boolean 比较获取子数组

c# - Xamarin 加载操作失败

c# - 将表达式参数作为参数传递给另一个表达式

c# - 如何在 ASP.Net Core 1.1 中响应.Cookies.Append()?

R - 将具有 NULL 类型的列表转换为数据帧

C# 链接到 SharePoint 表单库的编辑表单