C#'或'运营商?

时间:2009-11-17 02:56:28

标签: c#

C#中是否有or运算符?

我想这样做:

if (ActionsLogWriter.Close or ErrorDumpWriter.Close == true)
{
    // Do stuff here
}

但我不确定我该怎么办。

7 个答案:

答案 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 ++有许多相似之处,但它们仍然是两种语言之间的差异;)