(0 ==变量)或(null == obj):C#中过时的练习?

dan*_*die 8 .net c# coding-style

完全重复:

为什么在C#中经常会看到"null!= variable"而不是"variable!= null"?

我见过高级开发人员使用标题中提到的语法.

是否需要在.NET中指定常量?(与C/C++世界相反)

Jon*_*eet 21

不,没有必要这样做,因为它试图避免的问题 - 即错误:

if (variable = 0)
Run Code Online (Sandbox Code Playgroud)

无论如何都不会在C#中编译.if语句中的条件必须是布尔值.仍有发生以下错误之一的风险:

if (something = true)
if (something = false)
Run Code Online (Sandbox Code Playgroud)

if something是一个布尔变量,但更好的解决方法是避免常量:

if (something)
if (!something)
Run Code Online (Sandbox Code Playgroud)

如果你让开发人员从其他语言中提取这样的习语而不考虑它们是否适合C#,你应该留意他们做更多相同的事情.如果您尝试编写C#就像它是C++(或任何其他语言,几乎 - 可能除了VB.NET),您最终将编写非惯用的C#代码.

编辑:作为克莱图斯指出的,值得关注的另一个潜在领域:

bool a = false, b = true; 
if (a = b) { } // No warnings
Run Code Online (Sandbox Code Playgroud)

所以错误仍然可能发生 - 但是我们不管怎么说,我们已经超出了与常数相比的范围:)我会说这种情况非常罕见,并且不值得花费太多时间来担心它.


Bil*_*ard 10

在现代世界中不需要这种语法.当我们的C编译器没有警告我们我们即将发射导弹时,我们很多人都习惯了这种习惯.

if(status = RED_ALERT)
{
    launchMissiles();
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*ana 5

我怀疑这是一个遗留的习惯.在C:

 if (0 = variable)
Run Code Online (Sandbox Code Playgroud)

将抛出编译器错误,而

 if (variable = 0)
Run Code Online (Sandbox Code Playgroud)

将不会.