C# 如何最好地检查xor B是否为空?

C# 如何最好地检查xor B是否为空?,c#,null,boolean-logic,xor,C#,Null,Boolean Logic,Xor,检查只有A是null还是只有B是null的最佳方法是什么?我一直在尝试许多不同的方法来找到感觉干净的东西,这就是它变得多么复杂: bool CheckForNull(object a, object b) { if(a == null && b == null) { return false; } if(a == null || b == null) { return true; } retu

检查只有A是null还是只有B是null的最佳方法是什么?我一直在尝试许多不同的方法来找到感觉干净的东西,这就是它变得多么复杂:

bool CheckForNull(object a, object b)
{
    if(a == null && b == null)
    {
        return false;
    }
    if(a == null || b == null)
    {
        return true;
    }
    return false;
}
我的最佳(也是最明显的)版本是:

bool CheckForNull(object a, object b)
{
    return a == null && b != null || a != null && b == null;
}
但我也不喜欢这样。(当然我可以添加括号…)

有没有一种我从未学过的标准方法

return (a == null) != (b == null);

可以使用xor运算符

bool CheckForNull(object a, object b)
{
    return (a == null ^ b == null);
}

如果需要/想要使用xor,可以使用:

return (a == null) ^ (b == null);
但要使其起作用,
true
必须计算为相同的“值”

但在这种情况下,我想我会尽量简单。实际上,您的第二个版本看起来并不那么糟糕:

return a == null && b != null || a != null && b == null;

而且有可能提前退出。(如果幸运的话,编译器甚至可以优化它以并行执行(指令管道化))。

True必须计算为相同的值吗?什么意思?当true不等于true时?@evorl根据语言的不同,任何不为零的值都可以计算为true(0为false,其他值均为true)。因此,如果左边的'true'为1,右边的'true'为2,那么xor将不会像预期的那样工作。不需要怀疑哪种语言。