我在浏览.net源时遇到了一些声明:
If( null != name)
If( false == check())
上述陈述中的(name!= null)和(Check()== false)语句有什么区别?
任何人都能让我清楚这一点吗?请。
答案 0 :(得分:4)
我确定这是重复的,但我现在找不到它。
具有常量优先的代码通常由具有(旧)背景的开发人员在C中编写,您可以在其中写下:
if (NULL == x)
而不是:
if (x == NULL)
万一你犯了这样的拼写错误:
if (x = NULL) // Valid, but doesn't do what you want.
在C#中的大多数案例中,您不需要这样做 - 因为if
语句中的条件必须可转换为bool
。
当您与布尔常量进行比较时 会产生影响:
if ((Check() = false) // Eek!
......这是写作的一个原因:
if (!Check())
基本上,将变量放在第一位通常更具可读性 - 而在C#中,将常量放在第一位的原因几乎从不适用。 (现代C和C ++编译器通常会给你一个警告,因此,就我所知,这些语言不再是一个好主意......)
就评估顺序而言,理论的区别在于左手操作数将在右手操作数之前进行评估......但是由于常量null
和false
没有任何副作用,因此没有真正的差异。
答案 1 :(得分:3)
我认为这种风格带有C / C ++背景,其中运算符=
也可以在if语句中使用,它可以用于比较和赋值。
声明
if( null != name)
与if(name != null)
相同,因此另一个声明
为了防止错误地将值分配到左侧,这种检查方式在C / C ++中使用,
答案 2 :(得分:1)
看看Coding Horror Yoda Conditions
使用if(constant == variable)而不是if(variable == constant), 喜欢if(4 == foo)。因为它就像是说“如果蓝色是天空”或者 “如果高个男人”。
答案 3 :(得分:0)
奇怪的逆转看起来像是由C / C ++程序员编写的...基本上,在C / C ++中,如果你不小心输入:
if(name = null)
而不是
if(name == null)
然后编译并在调用时将值更改为null。避免这种错误的C / C ++习惯是使用常量,例如null
/ false
总是在左侧 。这是因为您无法重新分配常量,因此如果您使用=
而不是==
,则会生成编译器错误。在C#中,它(if(a = null)
)通常不会编译,所以这不是一个问题。
这里的位置没有区别 - 双方都会被评估。习惯性的C#就是这样:
if(name != null) ...
if(!check()) ...