比如说我创建了一个Duck
Duck myDuck = DuckFactory.CreateDuck();
过去我总是检查myDuck是否为空
if (myDuck == null)
{
// Do stuff
}
我最近查看了一些首先检查null的代码。
if (null == myDuck)
{
// Do stuff
}
在我看来,这些是相同的,但这两者之间有什么不同吗?一个人对另一个人有任何表现上的好处吗?是否有建议的最佳做法来检查对象是否为空?
答案 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