我总是对表达空值的不同方式感到困惑.有空引用类型(又名"null").然后我看到在我的应用程序中,开发人员使用MinValue来表示空值.例如:Double.MinValue或DateTime.MinValue,但它们使用"null"的字符串除外
然后是System.DBNull(和System.DBNull.Value - 不知道什么时候使用).为了增加混乱,也有System.Nullable
和System.Nullable
命名空间.
有人能帮助我清除这种无效的混淆吗?
谢谢
当然.
System.DBNull
是ADO.NET用来表示null
数据库中的值的类(现在仍然是).
null
实际上是一个null
引用,并且在您的应用程序代码中,任何引用类型都应该使用null
它的null
值.
的使用MinValue
的各种原语类型(其中,由于它们是值类型不能被分配null
)可追溯至暗天之前C#2.0,它引入泛型.现在,表示可空基元类型的首选方法是使用Nullable
泛型类型,通常用简写表示基本类型之后的问号.例如,我可以声明一个在C#中int
命名的可以为null的变量foo
:
Nullablefoo;
要么
int? foo;
两者都是相同的.
null
仅对引用类型有效:类型class
而不是a structure
.
.Net也有值类型:int,double,DateTime等.值类型不能为null,你通常将它们与它们的默认值进行比较,这通常很常见type.MinValue
,但可能是某些东西(例如,考虑布尔值).
Nullable
当你有一个可能真正为null的值类型时.默认值(可能是MinValue)也是有效的,您需要将其与尚未分配变量的时间区分开来.在C#中,你可以使用?使用值类型作为简写符号(例如:) int?
,但您仍然创建相同的符号Nullable
.
DBNull
特指从数据库中的NULL值.这与在语言中的其他位置使用null不同:它仅用于与数据库通信,因此您可以知道查询何时返回空值.
使用泛型时,您还会看到使用的default(T)
构造,其中T是类型参数.这允许您设置类型的默认值,而无需知道该类型是引用类型还是值类型,更不用说特定值类型的默认值.