C# 'or' 运算符?
在C#中,OR运算符是短路的。在你的示例中,Close似乎是一个属性,但如果它是一个方法,值得注意的是:
if (ActionsLogWriter.Close() || ErrorDumpWriter.Close())
与
if (ErrorDumpWriter.Close() || ActionsLogWriter.Close())
在C#中,如果第一个表达式返回true,则根本不会评估第二个表达式。只需注意这一点。大多数情况下,这实际上对你有利。
它是属性还是方法有关吗?在这种情况下,我猜属性代码和方法代码一样被调用。
这是一个很好的观点。如果属性具有副作用(这也是非常糟糕的设计),同样的警告适用。
C# 9引入了一个新的关键字or
,用于匹配"disjunctive pattern"(或模式)。这是C# 9中的一系列新的模式匹配增强功能之一。
通过一个示例来说明这个功能,代码如下:
public static bool IsLetter(this char c) => c is >= 'a' and <= 'z' or >= 'A' and <= 'Z';
这段代码的作用是判断一个字符是否是字母。在这个例子中,使用了or
关键字来组合两个范围判断条件:c is >= 'a' and <= 'z'
和c is >= 'A' and <= 'Z'
。如果字符c满足其中任意一个条件,IsLetter
函数返回true
,否则返回false
。
这个新的or
关键字的出现,使得在模式匹配中可以更方便地组合多个条件。在以前的版本中,我们可能需要使用多个if
语句来实现类似的功能。而现在,使用or
关键字可以让代码更加简洁和易读。
通过引入or
关键字,C# 9进一步增强了模式匹配的功能,使得开发者可以更灵活地进行模式匹配操作,提高了代码的可读性和可维护性。这对于编写清晰和高效的代码来说非常有帮助。
总结起来,C# 9引入的or
关键字在模式匹配中的出现,是为了让开发者能够更方便地组合多个条件,以实现更灵活的模式匹配操作。通过使用or
关键字,我们可以简化代码,提高代码的可读性和可维护性。这是C# 9中模式匹配增强功能的一部分。
C#支持两个布尔“或”运算符:单竖杠“|”和双竖杠“||”。它们的区别在于,“|”运算符总是检查左右两个条件,而“||”只有在必要时才检查右边的条件(如果左边的条件评估为假)。
这一点在右边的条件涉及处理或导致副作用时非常重要。(例如,如果你的ErrorDumpWriter.Close方法需要一段时间才能完成,或者改变了某个状态。)
那么是否应该这样理解:当左边的条件评估为假时,||只检查右边的条件?因为TRUE OR ANYTHING总是TRUE。
只是一个小问题——当然还有更多的布尔运算符,也许可以重新表述为“两个布尔/逻辑OR运算符”。
要小心:||是一个逻辑运算符,而|是一个二进制运算符。
不,如果操作数是布尔型,|运算符就是逻辑运算符。只有当操作数是整数时才被视为二进制运算符。
现在还有一个or关键字。