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

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

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

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 --------------------------...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, t...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integ...