条件语句产生不同的结果然后If Then

时间:2013-07-16 20:01:50

标签: .net vb.net conditional-statements

试图找到一个小秘密的底部。

我有以下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

为何与众不同?

1 个答案:

答案 0 :(得分:3)

问题在于VB.NET如何使用If运算符推断类型。两个操作数必须是相同的类型。一边是Nothing而另一边是Guid,它假设结果类型应该是Guid,因此它会强制NothingGuid.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, Nothing, CType(vendor.Address.ID, Nullable(Of Guid)))