如果一个且只有一个参数为真,则返回运算符

Tan*_*ith 1 c# operators

我在C#中创建一个if语句,如果只有一个参数为true,我想返回true.我将||在示例中使用,因为这是我能想到的最接近的事情:

int a = 1;
int b = 2;
int c = 3;

if(a == 1 || b == 2)
{
Console.Log("The first statement is true")
}

if(a == 1 || b == 3)
{
Console.Log("The second statement is true")
}

if(a == 0 || b == 0 || c == 3)
{
Console.Log("The third statement is true")
}

if(a == 1 || b == 0 || c == 3)
{
Console.Log("The fourth statement is true")
}

//Output:
//The second statement is true
//The third statement is true
Run Code Online (Sandbox Code Playgroud)

再一次,把它想象||成我正在寻找的运营商.这样的运算符是否存在,或者我应该定义自己的布尔函数?

Jon*_*eet 7

对于两个表达式,您可以使用XOR:

if (a == 1 ^ b == 0)
Run Code Online (Sandbox Code Playgroud)

对于两个以上,您可以执行以下操作:

if (new[] { a == 1, b == 0, c == 2 }.Count(x => x) == 1)
Run Code Online (Sandbox Code Playgroud)

这基本上计算从表达式构造的数组的所有"真实"元素,并检查计数是否为1.

无可否认,首先评估所有条件,即使前两个条件成立,也将计算所有条件(因此最后一个条件无关紧要).如果最终对你来说成本很高,那么还有更复杂的选择,但我肯定会坚持这样的事情,除非它确实是一个问题.

  • 我以为`x ^ y ^ z`会起作用,但如果所有三个都是'true`,它会错误地返回`true`.这似乎是正确的解决方案. (3认同)