5

试图找到一个小谜团的底部。

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

为什么有区别?

4

1 回答 1

3

问题在于 VB.NET 如何使用If运算符推断类型。两个操作数必须是同一类型。Nothing一方面给定,另一方面给定 a Guid,它假定结果类型应该是 a Guid,所以它强制Nothingto 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, Nothing, CType(vendor.Address.ID, Nullable(Of Guid)))
于 2013-07-16T20:17:44.593 回答