studio - La declaración ''If'' de VB.NET con ''O'' conditional tiene ambas partes evaluadas?
if estructura condicional 5 25 programación visual basic net con visual studio 2013 (2)
Pregunta rápida, de la cual la respuesta más rápida y fácil podría ser reordenar el código relacionado, pero veamos ...
Así que tengo una instrucción If
(una parte del código que es parte de una solución de trabajo completa escrita en C #) reescrita usando VB.NET. Soy consciente de que el método VB.NET IIf(a, b, c)
evalúa tanto b
a
independientemente de la veracidad de la primera evaluación, pero este parece ser el caso en mi construcción estándar también:
If (example Is Nothing Or example.Item IsNot compare.Item) Then
''Proceed
End If
O, mejor dicho, más apropiadamente:
If (example Is Nothing Or Not example.Item = compare.Item) Then
''Proceed
End If
Aquí, si el example
es Nothing
( null
), entonces todavía obtengo una NullReferenceException
. ¿Es esto mi culpa, o es algo que tengo que soportar al capricho de VB.NET?
Es su "culpa" porque así es como se define a Or
, entonces es el comportamiento que debería esperar:
En una comparación booleana, el operador Or siempre evalúa ambas expresiones, lo que podría incluir hacer llamadas a procedimientos. El Operador OrElse (Visual Basic) realiza un cortocircuito, lo que significa que si la expresión1 es Verdadero, entonces la expresión2 no se evalúa.
Pero no tienes que soportarlo. Puede usar OrElse
para obtener un comportamiento de cortocircuito.
Entonces probablemente quieras:
If (example Is Nothing OrElse Not example.Item = compare.Item) Then
''Proceed
End If
No puedo decir que se lea terriblemente bien, pero debería funcionar ...