C#:与null比较

15 c# null

这些是等价的:

if (null==myobject)
{
//do something 
}
Run Code Online (Sandbox Code Playgroud)

if (myobject==null)
{
//do something 
}
Run Code Online (Sandbox Code Playgroud)

或者他们会产生不同的代码?

Jar*_*Par 41

在99%的情况下,此代码是等效的.

一个例外是当有问题的对象的类型覆盖==运算符时.可能会在==中引入一个错误,当一个参数为null时会导致问题.

我之前见过的一个特例如下

public static bool operator==(Student left, Student right) {
  return left.Equals(right);
}
Run Code Online (Sandbox Code Playgroud)

当null在左侧时,这将失败,但在右侧为null时可能不会.

这是一个相当遥远的案例.

  • @Justice,但不要假设任何性能,相信探查器:) (4认同)

Rei*_*man 9

if将常量放在左边的" "语句的形式是来自C/C++的保留,你可以在if语句中使用任意表达式.

C#的if语句语法要求表达式求值为bool,这意味着if (foo = 0)不能编译.


小智 6

if (null==myobject) {
Run Code Online (Sandbox Code Playgroud)

是一种写if语句的安全方法.它来自C/C++,其中条件是一个被评估为的表达式int.如果结果为零意味着false,其他任何东西都是true.你可以写点像

if (variable == 1) {
Run Code Online (Sandbox Code Playgroud)

但如果你不小心你也可以写

if (variable = 1) { 
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您的赋值总是计算为1,因此始终为true.

您可以编译它并运行它没有任何问题,但结果将不是您所期望的.所以C/C++程序员开始编写类似的东西

if (1 == variable) {
Run Code Online (Sandbox Code Playgroud)

如果拼错它,这将无法编译,所以你总是必须按照你的意思来编写它.这后来成为一种(好的)习惯,你可以在你编程的所有语言中使用它,例如C#.