微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 应在左侧或右侧检查null

在回顾一些代码时,我看到:
if (null == condition) { ... }

我也看到了:

if (condition == null) { ... }

我似乎记得在左侧有一个null有一个优点,但是我不记得它,并且认为它是一个较旧的运行时项目,它已经被更新的.NET运行时优化了.我倾向于使用后者的无效检查,所以前者引起了我的注意.

那么这是一个风格问题,还是在评估的左侧或右侧有空的优势?

解决方法

它可以在三种情况下产生影响.

一个是条件= null的错误在if中有效.这在C风格的语言中更常见,它允许在if(值为false)中使用null,这是大多数,但不是C#.

可以在C#中创建具有此效果的类型:

public class Test
{
  public static bool operator true(Test x)
  {
    return true;
  }
  public static bool operator false(Test x)
  {
    return false;
  }
}
void Main()
{
  Test test = new test();
  if (test = null)
  {
    Console.WriteLine("!");
  }
}

重载这些运算符的次数并不是很多,特别是因为.Net 2.0引入了泛型(对于像sqlBoolean这样的类型更有价值,它们使我们现在使用bool的方式表示true,false或null? ).

因此,这种情况在C#中相当微不足道.

一个是类似的,如果有一个隐式转换为bool或一个类型反过来实现true和false运算符:

void Main()
{
  Test test = new test();
  if (test = null)
  {
    Console.WriteLine("!");
  }
}
public class Test
{
  public static implicit operator bool(Test x)
  {
    return true;
  }
}

由于某些原因,隐式运算符值得避免,但这比第一个例子稍微有点可能,但仍然不太常见.

一个是if ==以非对称方式过载:

public class Test
{
  public static bool operator == (Test x,Test y)
  {
    return ReferenceEquals(x,null);
  }
  public static bool operator !=(Test x,Test y)
  {
    return !(x == y);
  }
}
void Main()
{
  Test test = new test();
  if (test == null)
  {
    Console.WriteLine("This won't print.");
  }
  if (null == test)
  {
    Console.WriteLine("This will print.");
  }
}

但由于非对称==始终是一个错误,因此这取决于运算符中的错误以产生任何影响.这可能比第一种情况稍微更频繁地发生,但是当它发生时它应该被修复,所以它甚至不那么真实.

因此虽然它可以在C#中产生影响,但案例很少见,并且大多数是基于其他人做过他们不应该做的事情.

因此,它主要是风格问题.把null放在第一位的人倾向于从语言中汲取它,而这些语言更有意义.

原文地址:https://www.jb51.cc/csharp/92827.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐