C#中是否有or
运算符?
我想这样做:
if (ActionsLogWriter.Close or ErrorDumpWriter.Close == true)
{
// Do stuff here
}
但我不确定我该怎么办。
答案 0 :(得分:72)
C#支持两个布尔or
运算符:单个栏|
和双栏||
。
不同之处在于|
始终检查左右条件,而||
仅在必要时检查右侧条件(如果左侧评估为假)。
当右侧的病症涉及处理或导致副作用时,这是很重要的。 (例如,如果您的ErrorDumpWriter.Close
方法需要一段时间才能完成或更改某些状态。)
答案 1 :(得分:6)
另外值得一提的是,在C#中,OR运算符是短路的。在您的示例中,Close似乎是一个属性,但如果它是一个方法,则值得注意:
if (ActionsLogWriter.Close() || ErrorDumpWriter.Close())
与
根本不同if (ErrorDumpWriter.Close() || ActionsLogWriter.Close())
在C#中,如果第一个表达式返回true,则根本不会计算第二个表达式。请注意这一点。它在大多数情况下实际上对你有利。
答案 2 :(得分:4)
if (ActionsLogWriter.Close || ErrorDumpWriter.Close == true)
{ // Do stuff here
}
答案 3 :(得分:2)
或者是C#中的||
。
您可以查看this。
答案 4 :(得分:2)
从 C# 9 开始,有一个 or
关键字可用于匹配“析取模式”。这是此版本中几个新 pattern matching enhancements 的一部分。
文档中的示例:
public static bool IsLetter(this char c) => c is >= 'a' and <= 'z' or >= 'A' and <= 'Z';
答案 5 :(得分:1)
就像在C和C ++中一样,布尔或运算符是||
if (ActionsLogWriter.Close || ErrorDumpWriter.Close == true)
{
// Do stuff here
}
答案 6 :(得分:1)
单个“|”运算符将评估表达式的两侧。
if (ActionsLogWriter.Close | ErrorDumpWriter.Close == true)
{
// Do stuff here
}
如果表达式返回true,则双运算符“||”将仅评估左侧。
if (ActionsLogWriter.Close || ErrorDumpWriter.Close == true)
{
// Do stuff here
}
C#与C ++有许多相似之处,但它们仍然是两种语言之间的差异;)