if( null == this.somevariable ) 和 if( this.somevariable == null) 有什么区别? (这是一个提问标题,无需回答)

3
我知道这是一个愚蠢的问题,但这两个语句之间有什么区别?
if( null == this.someVariable)
{
 //do something
}

and 

if( this.someVariable == null )
{
//do something.
}

6
没有区别。第一种是 C/C++ 中的Yoda比较风格。 - Sergey Berezovskiy
1
这两个语句没有任何区别。 - David Heffernan
@Ballbin 在C#中,该语句已经是一个错误了。 - NWard
3个回答

5

从代码角度来看,它们是相同的。有些人更喜欢第一种风格,因为如果你犯了错误并且输入=而不是==,你会得到一个错误提示。


6
没有在C#中这样的东西,请自行尝试,停止投票支持。 - BRAHIM Kamel
@K.B:是的,你说得对。这是C++程序员在使用C#时的习惯 ;) - MicroVirus
3
@K.B同意,使用C#时你不会无意中进行赋值操作。除非你试图与true/false进行比较,这种情况我认为很奇怪。 - Sergey Berezovskiy

4

完全没有任何区别,除非你更喜欢哪一个。

这是来自C/C++世界的遗留问题:

if(null = someVariable)
{
}

会报错,但是:

if(someVariable = null)
{
}

不会的。

从技术上讲是正确的,但缺少了使用 null == x 的原因。如果你错过了其中一个 =, 它就会变成一个错误。 - ssube
@ssube,那不是原因。这是来自C世界的遗物。 - i3arnon
1
这确实是一个好答案。我正在审查一些Kinect库的MS代码示例,对于为什么使用第一种风格感到非常困惑。我发誓今天之前从未见过那个。 - Waddaulookingat

1

两个if语句对于你的示例得出相同的结果。

更相关的示例是这样的:

   string text = null;

   if(text.Equals("something"))
   {
   }

在这里,您将得到一个“NullReferenceException”,因此避免这种情况的另一种方法是反转比较:
   string text = null;

   if("something".Equals(text))
   {
   }

这样,您就知道常量"something"始终有效,并且任何可比较的项目都可以正常工作,因为源对象是有效的。

2
这就是为什么通常不应该使用实例的Equals方法。相反,应该使用静态的object.Equals方法(或者使用等号运算符,因为问题就不存在了)。 - Servy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接