Ref*_*din 5 .net vb.net conditional-statements
试图找到一个小秘密的底部.
我有以下If声明:
Dim myVal As Nullable(Of Guid)
myVal = If(vendor.Address.ID = Guid.Empty, Nothing, vendor.Address.ID)
Run Code Online (Sandbox Code Playgroud)
这里的最终价值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
Run Code Online (Sandbox Code Playgroud)
为什么不同?
问题在于 VB.NET 如何使用If运算符推断类型。两个操作数必须是同一类型。Nothing一侧给定,Guid另一侧给定 a,它假定结果类型应该是 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)
Run Code Online (Sandbox Code Playgroud)
或这个:
Dim myVal2 As Nullable(Of Guid)
myVal2 = If(vendor.Address.ID = Guid.Empty, Nothing, CType(vendor.Address.ID, Nullable(Of Guid)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |