条件陈述的区别

Muh*_*tar 8 c# asp.net

以下两个陈述之间是否有任何区别?

if (null != obj)
Run Code Online (Sandbox Code Playgroud)

if (obj != null)
Run Code Online (Sandbox Code Playgroud)

如果两者处理相同哪个更好?

Tim*_*imC 21

第一个是尤达条件.你不应该使用它.


ang*_*son 7

这里的区别是生成的代码.这两个代码不会产生完全相同的代码,但实际上这与两个语句的结果或性能无关.

但是,如果你创建自己的类型,并覆盖不等式运算符,并做一个糟糕的工作,那么它将很重要.

考虑一下:

public class TestClass
{
    ...

    public static bool operator !=(TestClass left, TestClass right)
    {
        return !left.Equals(right);
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果运算符的第一个参数为null,即.if (null != obj),然后它会崩溃NullReferenceException.

总结一下:

  • 生成的代码不同
  • 性能和最终结果应该相同
    • 除非您在所涉及的类型中破坏了代码

现在,我认为你问的原因是你看过C中的代码,它通常有这样的代码:

if (null == obj)
Run Code Online (Sandbox Code Playgroud)

请注意,我在这里切换到相等检查.原因是使用旧的C编译器编写的程序中经常出现的错误(这些天他们倾向于发现这个问题)将是切换它并忘记其中一个相同的字符,即.这个:

if (obj = null)
Run Code Online (Sandbox Code Playgroud)

这将赋予null变量而不是比较变量.当时打击这个错误的最佳方法是切换它,因为你不能分配任何东西null,它不是变量.即.这将无法编译:

if (null = obj)
Run Code Online (Sandbox Code Playgroud)


Mad*_*ine 5

不,但第二种方式更常见,更易读(我认为更合乎逻辑)