为什么在C#中经常看到“NULL!=变量”而不是“变量!=NULL”?

为什么在C#中经常看到“NULL!=变量”而不是“变量!=NULL”?

在C#中,对于你陈述条件的顺序,过剩速度有什么不同吗?

if (null != variable) ...if (variable != null) ...

自从最近,我经常看到第一个,它引起了我的注意,因为我已经习惯了第二个。

如果没有区别,第一个有什么好处呢?



猛跑小猪
浏览 360回答 3
3回答

慕桂英4014372

在C语言中,如果您使用了一个糟糕的编译器或者没有足够高的警告,这将在没有任何警告的情况下编译(而且确实是法律代码):// Probably wrongif (x = 5)你可能是说if (x == 5)您可以在C中通过以下操作来解决这个问题:if (5 == x)这里的错误将导致无效的代码。现在,在C#中,这都是一派胡言。除非您正在比较两个布尔值(这是很少见的,IME),否则您可以编写更具可读性的代码,作为“if”语句,首先需要一个布尔表达式,以及x=5“是Int32,不是Boolean.我建议,如果你在同事的代码中看到了这一点,你就会用现代语言的方式教育他们,并建议他们在将来写出更自然的形式。

千万里不及你

有一个很好的理由首先使用NULL:if(null == myDuck)如果你class Duck覆盖==接线员if(myDuck == null)可以进入无限循环。使用null首先使用默认的相等比较器,并实际执行您想要的操作。(我听说你最终习惯了阅读以这种方式编写的代码-我只是还没有经历过这种转换)。以下是一个例子:public class myDuck{     public int quacks;     static override bool operator ==(myDuck a, myDuck b)     {         // these will overflow the stack - because the a==null reenters this function from the top again         if (a == null && b == null)             return true;         if (a == null || b == null)             return false;         // these wont loop         if (null == a && null == b)             return true;         if (null == a || null == b)             return false;         return a.quacks == b.quacks; // this goes to the integer comparison     }}

慕勒3428872

我想这是一个转换语言的C程序员。在C语言中,您可以编写以下内容:int i = 0;if (i = 1){     ...}注意,这里使用了一个等号,这意味着代码将把1赋值给变量i,然后返回1(赋值是表达式),在if-语句中使用1,这将作为true处理。换句话说,上面的是一个bug。然而,在C#中,这是不可能的。事实上,两者并无分别。
打开App,查看更多内容
随时随地看视频慕课网APP