任何人都可以详细说明,为什么第二个抛出InvalidOperationException“Nullable对象必须有一个值”如果foo是Nothing?我希望它与第一个片段的工作原理相同,但显然我错过了一些东西:
摘录1:
If foo IsNot Nothing AndAlso foo.HasValue Then
_foo = foo.Value.Days
Else
_foo = 365
End If
如果foo为Nothing(正如预期的那样),则不抛出
摘录2:
_foo = CInt(IIf(foo IsNot Nothing AndAlso foo.HasValue, foo.Value.Days, 365))
如果foo为Nothing,则抛出InvalidOperationException - 为什么?
答案 0 :(得分:8)
因为旧的IIf
function不是新的If
operator。旧的不会短路,而新的则会短路。
_foo = If(foo IsNot Nothing AndAlso foo.HasValue, foo.Value.Days, 365)
您也不需要使用If
而不是IIf
进行投射。
您可以使用新的null-conditional-operator ?
:
_foo = If(foo?.Days, 365)
使用2个参数,If
- 运算符为空合并,其中3用作条件运算符。