我应该检查一个对象是第一个还是第二个?

时间:2009-03-24 21:38:27

标签: c#

比如说我创建了一个Duck

Duck myDuck = DuckFactory.CreateDuck();

过去我总是检查myDuck是否为空

if (myDuck == null)
{
  // Do stuff
}

我最近查看了一些首先检查null的代码。

if (null == myDuck)
{
   // Do stuff
}

在我看来,这些是相同的,但这两者之间有什么不同吗?一个人对另一个人有任何表现上的好处吗?是否有建议的最佳做法来检查对象是否为空?

5 个答案:

答案 0 :(得分:16)

第二个来自C / C ++(和其他地方),这是一个有效的构造

if (myDuck = null) {
}

这在C#中无效(除非你的表达式解析为布尔值)。例如,这是有效的C#

bool b = ...
if (b = true) {
}

当你想要比较时,把常数放在第一位是防守的,以阻止意外分配。我会说更多的人把变量放在左边,但是将常量放到左边也没有错。

选择一个并保持一致。

答案 1 :(得分:1)

唯一不同的是,如果你偶然发现这个:

if(myDuck = null) ...

但实际上,C#编译器足够聪明,可以检测到这一点。

如果你偶然发现这个:

if(null = myDuck) ...

然后这会导致C或C ++时代出现错误。

长话短说:C#没什么区别。

答案 2 :(得分:0)

我认为没有任何区别。

if语句只是检查它包含的表达式是否为真。 Wheer myDuck位于==符号右侧的左侧,没有任何区别。

答案 3 :(得分:0)

首先放置'null'可防止意外分配(myDuck = null)。但是,有些编译器在尝试这样做时会抛出错误,因此这一点没有实际意义。 IMO一切都归结为风格 - 选择一个,并坚持下去:)

答案 4 :(得分:0)

一个看起来像C ++语法,另一个看起来像Java或C#。

从我读过的文章中,“null == myDuck”语法起源于人们意外地在if语句中分配的C语言:

if (myDuck = null)
  // returns true
相关问题