条件语句差分
回答
这里的区别是生成的代码。这两者不会生成完全相同的代码,但实际上这两个陈述的结果或表现没有关系。
但是,如果您创建自己的类型,并重写不等式运算符,并做一个糟糕的工作,那么它会很重要。
考虑一下:
public class TestClass
{
...
public static bool operator !=(TestClass left, TestClass right)
{
return !left.Equals(right);
}
}
在这种情况下,如果第一个参数的经营者为空,即。 if (null != obj)
,那么它会崩溃与NullReferenceException
。
因此,要总结:产生
- 的代码是不同的
- 性能和最终结果应该是相同的
- 除非你已在所涉及的类型断码
现在,我想你问的原因是,你见过代码C,W通常有这样的代码:
if (null == obj)
请注意,我切换到相等检查在这里。原因在于用旧的C编译器编写的程序中的一个频繁的错误(现在他们倾向于解决这个问题)将会切换它并忘记其中一个相同的字符,即。此:
if (obj = null)
此分配null
到变量,而不是比较它的。解决这个问题的最好方法就是切换它,因为你不能指定任何东西到null
,它不是一个变量。即。这将无法编译:
if (null = obj)
不,没有。完全一样。
风格null == obj
有时只是用来防止常见错字obj = null
不意外null分配给一个变量,但!=
但绝对没有理由这样做。
在.NET中,它不会实际编译输入错误obj = null
。
所以编译器可以防止你意外地做到这一点。
Yoda condition最初来自其他语言,缺少此编译器功能。
如果你不小心使用`=`来替代`==`,编译器会发出警告。 – LukeH 2011-02-10 13:45:11
是的,我只是想补充说.NET。 – 2011-02-10 13:45:53
不,但第二种方式更普遍,更可读(在我看来更符合逻辑)
第一种是Yoda条件。使用它你不应该。
它们完全一样。
有些人喜欢把null作为表达的第一部分,以避免类似
if (obj = null) // should be obj == null
但是,当然,这并不适用于!=
操作,所以在你的榜样,它只是一个错误风格的差异。
使用第一种形式
if (blah == obj)
从天茎时,编译器不会赶上if (obj = blah)
即无意转让,除非编译警告级别设置为最大
声明的第一类从C/C++,在那里有可能通过不布尔值状况检查来了。例如。任何不是0就是如此,零是假的:
if (5) { } // true
if (0) { } // false
有时它造成的问题,如果你忘了输入一个“=”字符:
if (x = 5) { } // this was true always and changed x value
if (x == 5) { } // this was true, if x was equal to 5
因此,使用尤达语法,收到编译器在情况下,一个 '=' 错误被错过:
if (5 = x) { } // this was generating compiler error for absent-minded programmers
if (5 == x) { } // this was true, if x was equal to 5
C#允许在条件只有布尔值,所以
if (x = 5) { } // this won't compile
if (x == 5) { } // this is true, if x was equal to 5
什么布尔类型?
if (y = true) { }
if (y == true) { }
嗯,这是无用的代码,因为你可以写if(y)。 结论:Yoda语法随C/C++一起消失了,您不必再使用它了。
- 1. 分配的条件语句
- 2. 差分构造SQL语句
- 3. 条件语句的屏幕分辨率?
- 4. C#条件语句
- 5. .htaccess条件语句
- 6. C#条件语句
- 7. XSL条件语句
- 8. 多条件语句
- 9. IF语句条件
- 10. SQL条件语句?
- 11. Z3条件语句
- 12. CSS条件语句
- 13. SQL语句条件
- 14. 条件INFILE语句
- 15. 条件XPath语句
- 16. SQL条件语句
- 17. SQL条件语句
- 18. 枝条分隔if语句
- 19. Python条件语句和if语句
- 20. 转换PHP条件语句到MySQL的if-then条件语句
- 21. 问题与React.js条件语句另一个条件语句
- 22. SQL语句语法差异
- 23. 差异IIF语句
- 24. 误差ifelse语句
- 25. if语句条件中的差异 - 如何使其为真?
- 26. OpenMP与条件语句竞争条件
- 27. 如何以多条语句为条件调用后置语句?
- 28. 汇总条件语句
- 29. 匹配语句用条件
- 30. 在IF条件语句
它们可以是不同的,如果一个白痴推翻!=运算符。 – CodesInChaos 2011-02-10 13:43:26