我怎样才能最好地检查 A xor B 是否为空?

How can I best check if A xor B are null?

检查是只有 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;
}

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

是否有我从未学过的标准方法?

这个怎么样:

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

您可以使用异或运算符

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

如果你need/want使用异或,你可以使用:

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

但为了使它起作用,true 必须计算相同的 'value'。

但在这种情况下,我想我会尽可能简单。你的第二个版本实际上看起来还不错:

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

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