并且在IIF中也不会短路

时间:2017-08-24 11:42:14

标签: vb.net

任何人都可以详细说明,为什么第二个抛出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 - 为什么?

1 个答案:

答案 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用作条件运算符。