所以C#现在允许你使用default(Foo)
得到公认的“不填充尚未”一类的/空实例 - 我不知道这是否是完全一样new Foo()
与否。许多库类还实现了一个Foo.Empty
属性,该属性返回一个类似的实例。当然,任何参考类型都可以指向null
。真的,有什么不同?何时是对还是错?什么更一致,或表现更好?在检查对象是否在概念上“未准备好迎接黄金时段”时,应该使用什么测试?并非每个人都有Foo.IsNullOrEmpty()
。我应该使用默认(Foo),Foo.Empty还是null?
3
A
回答
16
default(Foo)
将返回空值时Foo
是一个类型,零其中Foo
是值类型(如int),以及Foo
与初始化为其各自default()
值,其中Foo
是一个结构的所有字段的实例。它被添加到语言使仿制药可支持两种值类型和引用类型 - 更多info at MSDN
使用default(Foo)
当你在SomeClass<T>
或MyMethod<T>
背景下测试T和你不知道T是否会值类型,类类型或结构。
否则,空应该是指“未知”,而空应该是指“我知道这是空的”。如果你真的需要一个空的 - 但非空的 - 你的类的实例,请使用Foo.Empty模式;例如String.Empty
作为""
的替代方法,如果您需要将某些变量初始化为空字符串。
如果你知道你在使用引用类型(类),没有涉及泛型,并且你正在显式测试未初始化的引用,那么使用null。
2
default(Foo)
同时适用于值类型和引用类型。 New Foo(), null
和Foo.Empty()
不。这对于使用泛型类型来说是一个很好的选择,例如,当你不知道你在处理哪个类型时。但在大多数参考类型的情况下,null
可能已经足够好了。
2
当你知道涉及的实际类型,或者如果你有一个类型参数约束“:class”,使用已知值(null,0等)是最简单的。
当你拿到一个类型参数是无约束或限制以外的其他引用类型,你需要使用默认(T)。
相关问题
- 1. 我应该使用.find(“.foo .bar”)还是.children(“.foo”)。children(“.bar”)?
- 2. C#:一个枚举的默认值应该是None还是Unknown?
- 3. 我应该使用public $ var还是应该使用__construct()?
- 4. 我应该使用表格还是div?
- 5. 我应该使用NSOperation还是NSRunLoop?
- 6. 我应该使用SASS还是SCSS?
- 7. 我应该使用SVN还是Git?
- 8. 我应该使用em还是px?
- 9. 我应该使用MapView还是MapFragment
- 10. 我应该使用Angular.copy()还是_.clone()?
- 11. 我应该使用BIT(1)还是BOOL?
- 12. 我应该使用GulpJS还是Ember-cli?
- 13. RegEx - 我应该使用Capture还是Group?
- 14. 我应该使用Boost.GIL还是死了?
- 15. 我应该使用int还是UInt16?
- 16. 我应该使用node-uuid还是uuid?
- 17. 我应该使用data.frame还是矩阵?
- 18. 我应该使用Get还是Load - nhibernate?
- 19. Numpy:我应该使用newaxis还是None?
- 20. 我应该使用JSON还是XML?
- 21. 我应该使用double还是float?
- 22. 我应该使用ImageButton还是Button?
- 23. 我应该使用Timer,Handler还是ASyncTask?
- 24. 我应该使用PowerShell还是CMD.exe?
- 25. JDO - 我应该使用detachCopy还是makeTransient?
- 26. 我应该使用PurePDF还是AlivePdf
- 27. 我应该使用plist,SQLite还是NsMutableArray?
- 28. 我应该使用AJAX还是WebSockets。
- 29. 我应该使用MySQL还是MongoDB?
- 30. Python:我应该使用eval,exec还是..?
什么是Foo?每种类型都有不同的默认值! – azamsharp 2008-10-09 19:45:22