如果Boolean
值FormFoo.Bar.Baz.Quux
存在且True
,我想采取一些措施。但是,Bar
和Baz
是类类型的成员,可能是Nothing
(在这种情况下,不应采取操作)。
我目前有以下代码,但它很难看:
If (Not FormFoo.Bar Is Nothing) AndAlso (Not FormFoo.Bar.Baz Is Nothing) AndAlso FormFoo.Bar.Baz.Quux Then
DoSomething()
End If
是否有另一种方法可以进行更易读的测试?
答案 0 :(得分:3)
如果您使用的是Visual Studio 2015,则可以使用Null-Propagating operator执行此操作:
If FormFoo.Bar?.Baz?.Quux Then
' If branch taken only if Bar and Baz are non-null AND Quux is True
DoSomething()
End If
或者我认为您可以检查NullReferenceExceptions
,但这有点乱,我不鼓励在正常的代码操作中抛出异常:
Try
If FormFoo.Bar.Baz.Quux Then
DoSomething()
End If
Catch ex As NullReferenceException
'ignore null reference exceptions
End Try
除此之外,你可以将代码重构为一个单独的函数,这甚至可以使它更具可读性:
If DoINeedToDoSomething() Then
DoSomething()
End If
Private Function DoINeedToDoSomething() As Boolean
'return false is any object is null/nothing
If FormFoo.Bar Is Nothing OrElse FormFoo.Bar.Baz Is Nothing Then Return False
'object are not null so return the value of the boolean
Return FormFoo.Bar.Baz.Quux
End Function
请注意,使用IsNot
可以稍微整理原始代码 - 这是Microsoft建议的标准:
If (FormFoo.Bar IsNot Nothing) AndAlso (FormFoo.Bar.Baz IsNot Nothing) AndAlso FormFoo.Bar.Baz.Quux Then
DoSomething()
End If