在 .NET 中,有引用类型与值类型两种对象类型,而其中值类型是“不可空”的类型,比如你设定一个int i = null,那么它会使用默认值0来为自己赋值。
然而有些时候,我们需要一个可空的值类型(比如数据库中的可空字段),那么该怎么办呢?

可空值类型

其实在 .NET 中,你只需在数据类型的后面添加一个?问号,即可将该数值设置为一个可空值类型!
Dim i As Integer? = Nothing
If i IsNot Nothing Then
    MsgBox(i)
End If
int? i = null;
if(i != null) {
    MessageBox.Show(i.ToString());
}
需要注意的是:
VB在判断数值是否为空时,一定要用 变量 IsNot Nothing 来进行判断,变量 <> Nothing 是错误用法!

原理分析

看完了上面的演示代码,你就已经算是掌握了可空值类型的用法,但如果你想追根究底,那么我们就来分析一下可空值类型到底是什么原理。

实际上数值后面加问号的写法,只是 .NET 的语法糖,而其真正的声明与使用代码,应该是下面的示例代码:
Dim i As Nullable(Of Integer) = Nothing
If i.HasValue Then
    MsgBox(i.Value)
End If
Nullable<int> i = null;
if( i.HasValue ) {
    MessageBox.Show(i.Value.ToString());
}
所谓的可空值类型,不过是用了一个名为 Nullable 的结构对象来装载了我们所指定的数据类型,而在判断的过程中,语法糖将我们的判断语句改换成了 i.HasValue 函数,用来判断当前的对象是否包含数据。
而其中的i.Value属性保存了我们所设定的数值,如果你将数值设为了null,那么它就会返回一个错误来提醒你未初始化对象!