不,没有必要这样做,因为它试图避免的问题 - 即错误:
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
所以错误仍然可能发生 - 但是我们不管怎么说,我们已经超出了与常数相比的范围:)我会说这种情况非常罕见,并且不值得花费太多时间来担心它.
不,没有必要这样做,因为它试图避免的问题 - 即错误:
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
所以错误仍然可能发生 - 但是我们不管怎么说,我们已经超出了与常数相比的范围:)我会说这种情况非常罕见,并且不值得花费太多时间来担心它.
在现代世界中不需要这种语法.当我们的C编译器没有警告我们我们即将发射导弹时,我们很多人都习惯了这种习惯.
if(status = RED_ALERT) { launchMissiles(); }
我怀疑这是一个遗留的习惯.在C:
if (0 = variable)
将抛出编译器错误,而
if (variable = 0)
将不会.