if 语句,&& 运算符逻辑(编写此类技巧的重要性是什么?)

if statement , && operators logic ( What is the importance of coding such trick ? )

 public List<Product> SetProducts { get; set; }
 public string ParentSetId { get; set; }

第一个案例:

if (SetProducts.Any(p => p.blabla== Enum.blabla) && string.IsNullOrEmpty(ParentSetId))

第二种情况:

if (string.IsNullOrEmpty(ParentSetId) && SetProducts.Any(p => p.blabla== Enum.blabla))

&& 运算符从左到右工作,因此 if 语句在每种情况下的行为都不同。 我们知道如果语句将在左条件之前检查然后如果结果 "true" 查找右语句。

第二种情况更有用。

它们的优点是什么?

编写这种技巧的重要性是什么?

谢谢

&& 会做一个短路评估,所以如果第一个条件为假,就不需要检查第二个条件。

考虑到这一点,您的第二个代码片段看起来更好,因为 string.IsNullOrEmpty(ParentSetId) 的比较可能 比通过项目列表并使用 [=12 检查更便宜=].

这个技巧很重要,即如果一个条件不满足则不应检查另一个条件。

例如:

if (node != null && node.data != key) {
    ...
}

如果我们交换了两个条件(即 node.data != key 首先被检查),那么我们就有取消引用空指针的风险。但是,如所写,我们在尝试取消引用之前确保 node 而不是 空指针。

您指的是短路布尔求值。

他们经常被用作守卫,如

if (someObject != null && someOperationInvolvingSomeObject)

从而防止在 someObject 为 null 的情况下出现异常。

它们有时也可用于重新排列逻辑以获得更好的性能,例如来自

if (slowMethod() || fastMethod())

if (fastMethod() || slowMethod())