检查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;
}
但我也不是那么喜欢。 (当然我可以添加括号......)
有没有一种标准的做法,我从未学过这种方法?
答案 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);
}