检查:null vs default()?

lan*_*nce 13 c# null .net-3.5

我想检查引用类型是否为null.我看到两个选项(_settings是引用类型FooType):

if (_settings == default(FooType)) { ... }
Run Code Online (Sandbox Code Playgroud)

if (_settings == null) { ... }
Run Code Online (Sandbox Code Playgroud)

这两者的表现如何不同?

Ste*_*ary 21

没有区别.任何引用类型的默认值是null.

MSDN的default关键字C#参考页面:https://msdn.microsoft.com/en-us/library/25tdedf5.aspx.


Ser*_*sen 19

现在我们不再需要将类型传递给默认值,默认值是首选。

  • 它同样可读

  • 它可以用于值类型和引用类型

  • 它可以用在泛型中

    if (_settings == 默认值) { ... }

另外,打电话后

obj = enumerable.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

之后测试默认值而不是 null 更有意义。否则它应该是 FirstOrNull,但 value 没有空值,但有默认值。


Mau*_*Mau 6

没什么不同,但我认为

if (_settings == null) { ... }
Run Code Online (Sandbox Code Playgroud)

更清楚了。


And*_*rey 6

没有区别,但第二个更具可读性.最好的用处default是处理泛型.常用代码是return default(T);

  • 对于“DateTime”,它返回“0001-01-01T00:00:00”,这是一个有效值...与“null”不同,它是无效值。 (2认同)
  • @YoushaAleayoub 该问题询问引用类型,而“DateTime”不是引用类型。 (2认同)