我想检查引用类型是否为空。 我看到两个选项(_settings 是引用类型 FooType):
if (_settings == default(FooType)) { ... }
和
if (_settings == null) { ... }
这两者的表现有何不同?
没有什么区别。任何引用类型的默认值为
null
。
MSDN 的
default
关键字的 C# 参考页:https://msdn.microsoft.com/en-us/library/25tdedf5.aspx.
现在我们不再需要将类型传递给默认值,默认是首选。
它同样可读
它可以用于值类型和引用类型
它可以用于仿制药
if (_settings == 默认) { ... }
另外,打电话后
obj = enumerable.FirstOrDefault();
之后测试默认值而不是 null 更有意义。否则它应该是 FirstOrNull,但 value 没有 null 值,但有默认值。
没有区别,但第二个更具可读性。使用
default
的最佳位置是处理泛型时。常用代码是return default(T);
没什么不同,但我认为
if (_settings == null) { ... }
更清楚了。
我的理解是它们没有不同。仅当您处理值类型时它才重要。
我肯定会进行针对 null 的特定检查。因为如果
_settings
类的类型发生变化,您可能会遇到引用问题。至少需要更改代码来破坏打开/关闭策略。
if( _settings == null ) {...}
这个IMO更安全、更清洁。
正如已经提到的,没有区别......但无论如何你可能想要使用
default(<type>)
来处理它不是引用类型的情况。通常这仅适用于泛型,但对于一般情况来说这是一个好习惯。
default
也可以更好地与结构一起工作,即如果我改变
public class MyDto
{
public int Id { get; set; }
}
到
public class MyDto
{
public int? Id { get; set; }
}
然后
if (dto.Id == default)
将继续正常运行。