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