Nullable数据类型理解
在C#和VB.net中的不同
在C#中当Nullable为Null时,可以正常判断
== \
== \
如 a ==
b 当 a = null 一样可以正确判断
b 当 a = null 一样可以正确判断
而在VB中, 当a 为
nothing时,则a=b 判断无法成立
nothing时,则a=b 判断无法成立
如:
Dim p1 As Nullable(Of Double)
Dim p2 As Nullable(Of Double) = 10.0
If (p1 = p2) Then ‘ If (p1 <> p2) Then
Me.Text = “OK”
Else
Me.Text = “no ok”
End If
不管写成 p1=
p2还是p1<>p2,永远无法进入OK这一项.
p2还是p1<>p2,永远无法进入OK这一项.
只有使用Equals这个写法,整个表达式才正常.记在此处,以后要防范
Nullable使得普通的Struct类型有了Null值的可能,与数据库中的Null值可以匹配使用
使得普通值类型的数据操作与String类似,有Null值
在vb.net中可以使用Is Nothing来判断是否有值
但不能使用
Convert.IsDBNull 来判断
Dim p1 As Nullable(Of Double)
If (TypeOf (p1) Is Double) Then
在VB中使用typeof
无法编译,提示值类型无法使用Typeof错误
无法编译,提示值类型无法使用Typeof错误
Dim p1 As Nullable(Of DateTime)
Dim p2 As String = p1.ToString()
Label1.Text = p2
–输出是空字符串
Dim p1 As Nullable(Of DateTime) = DateTime.Now
Dim p2 As String = p1.ToString()
Label1.Text = p2
–输出是日期字符串
Dim p1 As Nullable(Of Double)
Dim p2 As String = p1.ToString()
Label1.Text = p2
–输出是空字符串
论证:当为Null时,输出空字符串
论证:当为Null时,输出空字符串
Nullable(of
*) 只能与Struct类型使用,所以,String类型不能一起使用
*) 只能与Struct类型使用,所以,String类型不能一起使用
Dim p1 As Nullable(Of Double) = 10.0
p1 += 5
Dim p2 As String = p1.ToString()
Label1.Text = p2
–输出 15.0