C#:IF语句中操作数的执行顺序

时间:2012-08-13 07:22:09

标签: c#

我在浏览.net源时遇到了一些声明:

If( null != name)
If( false == check())

上述陈述中的(name!= null)和(Check()== false)语句有什么区别?

任何人都能让我清楚这一点吗?请。

4 个答案:

答案 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 ++编译器通常会给你一个警告,因此,就我所知,这些语言不再是一个好主意......)

就评估顺序而言,理论的区别在于左手操作数在右手操作数之前进行评估......但是由于常量nullfalse没有任何副作用,因此没有真正的差异。

答案 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()) ...