任何人都可以精心制作的,为什么第二个抛出InvalidOperationException异常"可空对象必须有一个值",如果foo是什么都没有?我希望它与第一个片段一样工作,但显然我遗漏了一些东西:
小片1:
If foo IsNot Nothing AndAlso foo.HasValue Then
_foo = foo.Value.Days
Else
_foo = 365
End If
Run Code Online (Sandbox Code Playgroud)
如果foo为Nothing,则不抛出(如预期的那样)
摘录2:
_foo = CInt(IIf(foo IsNot Nothing AndAlso foo.HasValue, foo.Value.Days, 365))
Run Code Online (Sandbox Code Playgroud)
如果foo为Nothing,则抛出InvalidOperationException - 为什么?
因为旧IIf函数不是新If运算符.旧的不会短路,而新的则会短路.
_foo = If(foo IsNot Nothing AndAlso foo.HasValue, foo.Value.Days, 365)
Run Code Online (Sandbox Code Playgroud)
你也不需要施放而If不是IIf.
您可以使用新的null-conditional-operator 使其更简洁?:
_foo = If(foo?.Days, 365)
Run Code Online (Sandbox Code Playgroud)
使用2个参数,If-operator是一个零合并,其中3个用作条件运算符.