C# 如何最好地检查xor B是否为空?
检查只有A是null还是只有B是null的最佳方法是什么?我一直在尝试许多不同的方法来找到感觉干净的东西,这就是它变得多么复杂: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
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将不会像预期的那样工作。不需要怀疑哪种语言。