我在浏览 .net 源代码时遇到了一些声明:
If( null != name)
If( false == check())
上述语句中的 (name != null) 和 (Check() == false) 语句有什么区别?
任何人都可以让我清楚这一点吗?请。
我在浏览 .net 源代码时遇到了一些声明:
If( null != name)
If( false == check())
上述语句中的 (name != null) 和 (Check() == false) 语句有什么区别?
任何人都可以让我清楚这一点吗?请。
我确定这是重复的,但我现在找不到。
带有常量的代码通常由具有(旧)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
没有任何副作用,没有真正的区别.
我认为这种风格带有C/C++背景,其中的运算符=
也可以在if语句中使用,既可以用于比较也可以用于赋值。
该语句
if( null != name)
与 相同if(name != null)
,因此与其他语句相同
为了防止错误地将值分配给左侧,这种检查方式在 C/C++ 中使用,
看看编码恐怖尤达条件
使用 if(constant == variable) 而不是 if(variable == constant),例如 if(4 == foo)。因为这就像说“如果天空是蓝色的”或“如果男人是高的”。
奇怪的反转看起来像是由 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()) ...