Make non-null class nullable
Possible Duplicate:
DateTime"null" value
C中有许多不可为空的内置类。例如,datetime,有时我想检查我的datatime对象是否为空,但我不被允许。如何向日期时间类插入可空性?
简而言之,结构是值类型。值类型必须始终有效(因此,必须在结构构造函数中初始化所有成员),并且不能为空。
然而,有一个骗子;
您可以使用
用途:
1 2 3 |
There are many built-in classes in C# that are not Nullable.
它们(
msdn-值类型
Unlike reference types, a value type cannot contain the null value.
However, the nullable types feature does allow for value types to
be assigned to null.
您可以使用
1 | DateTime? dateTimeObject = null; |
带有
The syntax T? is shorthand for Nullable, where T is a value type.
The two forms are interchangeable.
当然,可以通过更改声明使integer、double、datetime等为空。
1 | DateTime? dt = null. |
但是
你需要注意两件事。
1)日期时间?和datetime的数据类型不同,因此,如果您执行如下操作:
1 2 3 4 | DateTime? date1 = null; date1 = DateTime.Now; DateTime date2 = date1; // Wont work. |
获取可为空类型的值的正确方法如下:
1 | DateTime date2 = date1.Value; |
2)第二个问题是,在使用之前,您需要始终检查是否有值。
1 2 | DateTime? date1 = null; DateTime date2 = date1.Value; |
这将引发一个异常:"可以为空的对象必须有一个值"。
因此,添加nullable运算符并不是那么简单,每次使用变量时都需要检查属性"hasValue":
1 2 3 4 5 | DateTime? date1 = DateTime.Now; if(date1.HasValue) { DateTime date2 = date1.Value; } |
明智地使用空值。
您可以在类型末尾添加字符
1 | DateTime? date; |
用
1 | DateTime? dt = null; |
因此,不可为空的类型变为可为空的类型
Nullable types are instances of the System.Nullable struct. A
nullable type can represent the correct range of values for its
underlying value type, plus an additional null value.
可以为空的类型用问号
1 | DateTime? date = null; |
另外,
如果您使用可以为空的
1 | if(date.HasValue == true) |
当然,您可以将它们与诸如
严格来说,