当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《(0==变量)或(null==obj):C#中过时的练习?》经验,为你挑选了3个好方法。

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

if (variable = 0)

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

if (something = true)
if (something = false)

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

if (something)
if (!something)

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

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

bool a = false, b = true; 
if (a = b) { } // No warnings

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



1> Jon Skeet..:

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

if (variable = 0)

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

if (something = true)
if (something = false)

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

if (something)
if (!something)

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

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

bool a = false, b = true; 
if (a = b) { } // No warnings

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



2> Bill the Liz..:

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

if(status = RED_ALERT)
{
    launchMissiles();
}



3> Dana..:

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

 if (0 = variable)

将抛出编译器错误,而

 if (variable = 0)

将不会.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有