0

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

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

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

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

4

4 回答 4

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没有任何副作用,没有真正的区别.

于 2012-08-13T07:27:07.110 回答
3

我认为这种风格带有C/C++背景,其中的运算符=也可以在if语句中使用,既可以用于比较也可以用于赋值。

该语句 if( null != name)与 相同if(name != null),因此与其他语句相同

为了防止错误地将值分配给左侧,这种检查方式在 C/C++ 中使用,

于 2012-08-13T07:25:56.220 回答
1

看看编码恐怖尤达条件

使用 if(constant == variable) 而不是 if(variable == constant),例如 if(4 == foo)。因为这就像说“如果天空是蓝色的”或“如果男人是高的”。

于 2012-08-13T07:25:50.533 回答
0

奇怪的反转看起来像是由 C/C++ 程序员编写的......基本上,在 C/C++ 中,如果你不小心键入:

if(name = null)

代替

if(name == null)

然后编译并在调用时将值更改为 null 。避免这个错误的 AC/C++ 习惯是使用常量,例如null/false 总是在左边。这是因为您无法重新分配常量,因此如果您使用=而不是==. 在 C# 中,它 ( if(a = null)) 通常不会编译,所以这不是问题。

这里的位置没有区别 - 双方都进行了评估。惯用的 C# 就是:

if(name != null) ...
if(!check()) ...
于 2012-08-13T07:26:52.007 回答