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

时间:2016-01-06 22:49:41

标签: c# null boolean-logic xor

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

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;
}

但我也不是那么喜欢。 (当然我可以添加括号......)

有没有一种标准的做法,我从未学过这种方法?

3 个答案:

答案 0 :(得分:16)

这个怎么样:

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

答案 1 :(得分:2)

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

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

但为了实现这一目标,true必须评估相同的“价值”。

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

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

并且可能会提前退出。 (如果幸运的话,编译器甚至可以优化它以并行执行(指令流水线))。

答案 2 :(得分:1)

您可以使用xor运算符

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