试图找到一个小秘密的底部.
我有以下If声明:
Dim myVal As Nullable(Of Guid) myVal = If(vendor.Address.ID = Guid.Empty,Nothing,vendor.Address.ID)
myVal的结束值莫名其妙地是Guid.Empty.
如果我写相同的代码如下:
Dim myVal As Nullable(Of Guid) If(vendor.Address.ID = Guid.Empty) Then myVal = Nothing Else myVal = vendor.Address.ID End If
为什么不同?
问题在于VB.NET如何使用If运算符推断类型.两个操作数必须是相同的类型.一方面没有任何东西而另一方面没有Guid,它假定结果类型应该是Guid,因此它强制Nothing到Guid.Empty.对任何一方的Nullable(Of Guid)进行显式转换将足以告诉编译器这是你真正想要的.
这应该会给你你期望的结果:
Dim myVal2 As Nullable(Of Guid) myVal2 = If(vendor.Address.ID = Guid.Empty,CType(Nothing,Nullable(Of Guid)),vendor.Address.ID)
或这个:
Dim myVal2 As Nullable(Of Guid) myVal2 = If(vendor.Address.ID = Guid.Empty,CType(vendor.Address.ID,Nullable(Of Guid)))