(0 == variable) or (null == obj): An outdated practice in C#?
完全相同:
Why does one often see"null != variable" instead of"variable != null" in C#?
我已经看到高级开发人员使用标题中提到的语法。
是否需要在.NET中首先指定一个常量? (与C / C世界相反)
- stackoverflow.com/questions/271561/…的副本?
-
啊,天哪,为什么另一个问题使用"!= "而不是" == " ...我再也找不到该帖子...
-
@ Burkhard:感谢Burkhard第二次。
-
我们真的可以实施以下常见问题解答想法:stackoverflow.uservoice.com/pages/general/suggestions/…随着SO的增长,即使您知道重复项,也越来越难以找到重复项。
-
是的。这是我第二次不得不发布欺骗文件,而我本可以查找原始答案。投票给用户语音
-
@Jon-如果您使用Google和site:stackoverflow.com,则会更容易,尽管我同意需要更多常见问题解答。
-
Sung Meister,我不认识任何使用C语言进行编程的程序员。仍然有if(var = var)仍然有效的情况。最好放上编译器警告,并写出最令您满意的方式。
-
我认为(0 == var)语法看起来太不自然了。我想我可能应该尝试将它们切换(如果您使用Resharper,则可以使用" Ctrl Shift Alt LEFT或RIGHT箭头键"来切换它们)
-
@tvanfosson:我有点开始通过Google搜索SO帖子...
-
即使您编写0 == var,仍然有足够的bug源。您可以将> =编写为>或!=或其他任何内容,并且没有编译器会警告您。我主要将其视为程序员"炫耀"他们对分配0所知的一种方式。但我看不到它的实际用途。
-
@Sung Meister:是的,我通常使用Google查找旧帖子。当我尝试查找自己的帖子时,广告却挡住了我的路(:麻烦的是,这样的问题很难找到-它可以说什么。
不,不需要这样做,因为它试图避免的问题-即
的错字
无论如何都不会在C#中编译。 if语句中的条件必须为布尔值。仍然存在犯以下错误之一的风险:
1 2
| if (something = true)
if (something = false) |
如果something是布尔变量,但是解决此问题的更好方法是避免使用常量:
1 2
| if (something)
if (!something) |
如果您让开发人员从其他语言中引入这样的习惯用法,而又没有考虑它们是否适合C#,那么您应该留意他们做更多相同的事情。如果尝试像使用C语言(或其他任何语言,几乎是VB.NET的例外)一样编写C#,则最终将编写非惯用的C#代码。
编辑:正如教士指出的那样,还有一个潜在的问题值得关注:
1 2
| bool a = false, b = true;
if (a = b) { } // No warnings |
所以错误仍然可能发生-但是无论如何我们都无法与常量进行比较:)我想说的是这种情况很少出现,并且花太多时间担心它是不值得的。铅>
- 因此(0 == variable)语法可能是C / C中的残余习惯?
-
没有"可能"关于它。这是。
-
@Jon Skeet:您的第二个50K代表将来自回答使您获得第一个50K的问题的重复:P
-
值得注意的是:bool a = false,b = true; if(a = b){}不生成警告。
-
@Jon Skeet:谢谢您的更新评论。
-
@cletus:这是我要记住的事情。感谢您指出这一点。
在现代世界中不需要这种语法。当我们的C编译器不会警告我们即将发射导弹时,这是我们很多人习惯的。
1 2 3 4
| if(status = RED_ALERT)
{
launchMissiles();
} |
我怀疑这是一个剩余的习惯。在C:
将引发编译器错误,而
不会。
C#不需要。但这仍然是一个好主意。
编程与习惯息息相关,您永远不知道何时会发现自己写了一些javascript或更新了您认为早已不复存在的旧程序。
-
但是,您不是说它会影响可读性吗?当我们大声朗读代码时:我们不是在检查零是否等于变量。我们已经知道只有零只能等于零。我们要检查变量是否等于零。
-
我不知道:我认为这两种方法都非常清楚。
-
我已经多次听过可读性推理,但是我也从来没有考虑过这是一个问题。 ==运算符是对称的(除非您将其覆盖!),因此x == 0应该与0 == x相同。从过去的争论中我知道我是少数派。 :)
-
由于某种原因,当我在脑海中"说出"那部分代码时,我发现(null == obj)是非常不自然的。通常一个人会说"当对象为null时"而不是" null为对象"。
-
编程不应该是习惯。您应该绝对了解所使用的语言-使用适当的语言习惯用语。