所以C#现在允许你用来default(Foo)
获得一个认可的"未填充"/空类的实例 - 我不确定它是否完全相同new Foo()
.许多库类还实现了一个Foo.Empty
属性,该属性返回一个类似的实例.当然,任何参考类型都可以指向null
.那真的,有什么区别?什么时候是对还是错?什么更一致,或表现更好?在检查对象在概念上是否"未准备好黄金时间"时,我应该使用哪些测试?不是每个人都有Foo.IsNullOrEmpty()
.
default(Foo)
将在Foo
类类型时返回null ,其中0 Foo
是值类型(例如int),并且Foo
所有字段的实例都初始化为它们各自的default()
值,其中Foo
是struct.它被添加到语言中,以便泛型可以同时支持值和引用类型 - 更多信息在MSDN上
使用default(Foo)
时,你在的情况下测试为T SomeClass
或者MyMethod
,你不知道T是否将是值类型,类类型或结构.
否则,null应表示"未知",而空应表示"我知道这是空的".如果你真的需要一个空的 - 但是非null - 你的类的实例,请使用Foo.Empty模式; 例如String.Empty
,""
如果您需要将某个变量初始化为空字符串,则作为替代方法.
如果您知道自己正在使用引用类型(类),则使用null,不涉及泛型,并且您明确地测试未初始化的引用.