これは、手元の質問に正確に答えているわけではありません。すでに回答されているため、アントンが言及した「OrElse」キーワードを拡張する必要があると感じました。また、それは相対的なものである「AndAlso」です。実際にこれらについての説明が必要です。
'OrElse' と 'AndAlso' は、明示的に順序付けされた評価が必要な場合に役立ちます。
「Or」や「And」とは異なり、すべての式が評価される場合、「OrElse」または「AndAlso」を使用すると、最初の式が目的の値に評価される場合、If ステートメントは残りの式をスキップできます。
次の場合、式の順序は「OrElse」に左から右に適用されますが、前の値の結果に応じて常にすべての式を評価するとは限りません。
if( Expression1 orelse Expression2 orelse Expression3 )
' Code...
End If
Expression1 が true の場合、Expression 2 と 3 は無視されます。Expression1 が False の場合、Expression2 が評価され、次に Expression2 が True と評価される場合、Expression3 が評価されます。
If (False OrElse True OrElse False ) then
' Expression 1 and 2 are evaluated, Expression 3 is ignored.
End If
If (True OrElse True OrElse True ) then
' only Expression 1 is evaluated.
End If
If (True OrElse True OrElse True ) then
' only Expression 1 is evaluated.
End If
If (False OrElse False OrElse True ) then
' All three expressions are evaluated
End If
「OrElse」の別の使用例:
If( (Object1 is Nothing) OrElse (Object2 is Nothing) OrElse (Object3 is Nothing) ) then
' At least one of the 3 objects is not null, but we dont know which one.
' It is possible that all three objects evaluated to null.
' If the first object is null, the remaining objects are not evaluated.
' if Object1 is not NULL and Object2 is null then Object3 is not evaluated
Else
' None of the objects evaluated to null.
Endif
上記の例は、次の例と同じです。
If(Object1 Is Nothing)
' Object 1 is Nothing
Return True
Else
If(Object2 Is Nothing)
' Object 2 is Nothing
Return True
Else
If(Object3 Is Nothing)
' Object 3 is Nothing
Return True
Else
' One of the objects evaluate to null
Return False
End If
End If
End If
AndALsoキーワードもあります。
' If the first expression evaluates to false, the remaining two expressions are ignored
If( Expression1 AndAlso Expression2 AndAlso Expression3 ) Then ...
次のように使用できます。
If( (Not MyObject is Nothing) AndAlso MyObject.Enabled ) Then ...
' The above will not evaluate the 'MyObject.Enabled' if 'MyObject is null (Nothing)'
' MyObject.Enabled will ONLY be evaluated if MyObject is not Null.
' If we are here, the object is NOT null, and it's Enabled property evaluated to true
Else
' If we are here, it is because either the object is null, or it's enabled property evaluated to false;
End If
「And」とは異なり、「Or」と同様に、- は常にすべての式を評価します。
If( (Not MyObject is Nothing) And MyObject.Enabled ) Then ...
' MyObject.Enabled will ALWAYS be evaluated, even if MyObject is NULL,
' --- which will cause an Exception to be thrown if MyObject is Null.
End If
ただし、順序は「OrElse」と「AndAlso」で影響を与える可能性があるため、上記の例のように、オブジェクトが null である天気の評価を最初に行う必要があります。
'MyObject' が NUll の場合、以下は例外を引き起こします。
Try
If( MyObject.Enabled AndAlso (Not MyObject is Nothing) ) Then ...
' This means that first expression MyObject.Enabled Was evaluated to True,
' Second Expression also Evaluated to True
Else
' This means MyObject.Enabled evaluated to False, thus also meaning the object is not null.
' Second Expression "Not MyObject is Nothing" was not evaluated.
End If
Catch(e as Exception)
' An exception was caused because we attempted to evaluate MyObject.Enabled while MyObject is Nothing, before evaluating Null check against the object.
End Try
2 日間眠らずに過ごした後の午前 5 時 16 分にこれを書いたので、間違いやタイプミスがあればコメントしてください。