在我为谓词构建器看到的所有示例中,如果您正在构建一个“and”表达式标准,它会显示一个带有 PredicateBuilder.True
的起始表达式,如果您正在构建一个“or”表达式标准,它会显示 PredicateBuilder.False
。
我的问题是,是否总是如此,如果是这样,为什么不能简单地推断出这一点。我怀疑在某些情况下,您正在构建“and”表达式并希望从 false 开始。而“或”则相反
任何人都可以向我解释这个吗?
最佳答案
在表达式 A 和 B 以及 C 和 D 中,如果任何条件(A、B、C 或 D)为假,则整个表达式为假。所以如果你用 False 开始一个“and”表达式,不管你对它还有什么 AND ,整个表达式都会是 False。
与“或”表达式相同。在表达式 A 或 B 或 C 或 D 中,如果任何条件(A、B、C 或 D)为真,则整个表达式为真。因此,如果您以 True 开头的“或”表达式,无论您对它进行其他什么 OR 运算,整个表达式都将为 True。
至于为什么需要使用字面值 True 或 False 来启动 PredicateBuilder,我相信这只是使 PredicateBuilder 更容易使用的约定。您的表达式总是以( bool )条件开头,后跟 0 个或多个“和/或条件”部分。所以你可以有“A”,或“A 和 B”,或“A 和 B 和 C”。你永远不会以“和A”开头。 PredicateBuilder 的 .And(condition) 给表达式添加了“and condition”,所以你不能从它开始。可能有一个构造函数可以让您创建您的 Expression 并以初始条件启动它 (new Expression(A)?我还没有真正检查过...有吗?)但是然后你会必须以不同于处理第二个及后续条件(调用 .And(...) 或 .Or( ...))。 PredicateBuilder 的 .True() 和 .False() 方法处理创建您的表达式以及添加第一个(通用)条件,以便您可以处理添加第一个和所有后续条件您的循环相同(通过调用 .And(...) 或 .Or(...))。
关于PredicateBuilder 和或或,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9332489/