这些是等价的:
if (null==myobject) { //do something }
和
if (myobject==null) { //do something }
或者他们会产生不同的代码?
在99%的情况下,此代码是等效的.
一个例外是当有问题的对象的类型覆盖==运算符时.可能会在==中引入一个错误,当一个参数为null时会导致问题.
我之前见过的一个特例如下
public static bool operator==(Student left, Student right) { return left.Equals(right); }
当null在左侧时,这将失败,但在右侧为null时可能不会.
这是一个相当遥远的案例.
if
将常量放在左边的" "语句的形式是来自C/C++的保留,你可以在if语句中使用任意表达式.
C#的if语句语法要求表达式求值为bool,这意味着if (foo = 0)
不能编译.
该
if (null==myobject) {
是一种写if语句的安全方法.它来自C/C++,其中条件是一个被评估为的表达式int
.如果结果为零意味着false
,其他任何东西都是true
.你可以写点像
if (variable == 1) {
但如果你不小心你也可以写
if (variable = 1) {
在这种情况下,您的赋值总是计算为1,因此始终为true.
您可以编译它并运行它没有任何问题,但结果将不是您所期望的.所以C/C++程序员开始编写类似的东西
if (1 == variable) {
如果拼错它,这将无法编译,所以你总是必须按照你的意思来编写它.这后来成为一种(好的)习惯,你可以在你编程的所有语言中使用它,例如C#.