我怎样才能最好地检查 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;
并且有可能提前退出。 (如果幸运的话,编译器甚至可以优化它以并行执行(指令流水线))。
检查是只有 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;
并且有可能提前退出。 (如果幸运的话,编译器甚至可以优化它以并行执行(指令流水线))。