【发布时间】:2011-03-14 21:10:15
【问题描述】:
我想检查引用类型是否为空。我看到两个选项(_settings 是引用类型 FooType):
if (_settings == default(FooType)) { ... }
和
if (_settings == null) { ... }
这两者的表现有何不同?
【问题讨论】:
我想检查引用类型是否为空。我看到两个选项(_settings 是引用类型 FooType):
if (_settings == default(FooType)) { ... }
和
if (_settings == null) { ... }
这两者的表现有何不同?
【问题讨论】:
没有区别。任何引用类型的默认值为null。
default 关键字的 MSDN C# 参考页:https://msdn.microsoft.com/en-us/library/25tdedf5.aspx。
【讨论】:
我的理解是它们没有什么不同。只有在处理值类型时才重要。
【讨论】:
没有什么不同,但我认为
if (_settings == null) { ... }
更清晰。
【讨论】:
没有区别,但第二个更具可读性。使用default 的最佳位置是在处理泛型时。常用代码为return default(T);
【讨论】:
DateTime,它返回“0001-01-01T00:00:00”,这是一个有效值......不像null,这是一个无效值。
DateTime 不是引用类型。
default(不带括号),因为我本能地知道我使用的类型的默认值是什么。对于我的int,它可能意味着null 或DateTime.Min 或0。对于不会自动在脑海中注册默认值的人来说,这将更具可读性。例如,它还可以帮助您搜索分配了默认值的所有值。无需搜索null、0 或Decimal.Zero,您只需搜索default、== default 甚至is default
我肯定会针对 null 进行特定检查。因为如果 _settings 类的类型发生变化,您可能会遇到参考问题。至少需要更改破坏打开/关闭策略的代码。
if( _settings == null ) {...}
这个 IMO 更安全、更清洁。
【讨论】:
如前所述,没有区别...但是您可能无论如何都想使用default(<type>) 来处理它不是引用类型的情况.通常这仅在泛型中,但在一般情况下形成一个好习惯。
【讨论】:
现在我们不再需要将类型传递给默认值,默认值是首选。
可读性强
它可以用于值类型和引用类型
可以用在泛型中
如果(_settings == 默认){ ... }
【讨论】: