Tenemos una propiedad cuyo trabajo es buscar una descripción. Si la búsqueda falla, debe mostrar una cadena vacía.¿Capturas NullReferenceException o pruebas para Nothing primero?
por lo que podemos codificar la propiedad como esta:
If foo.bar Is Not Nothing Then
Return foo.bar.Description
Else
Return String.Empty
End If
Pero eso implica la ejecución de foo.bar dos veces, y si al hacerlo es caro, es probable que sea mejor así:
Dim b As bar = foo.bar
If b IsNot Nothing Then
Return b.Description
Else
Return String.Empty
End If
Pero realmente todo lo que queremos hacer es tratar cualquier tipo de error como una descripción vacía. Así que en cierto modo esto es más simple:
Try
Return foo.bar.Description
Catch e As NullReferenceException
Return String.Empty
End Try
¿Pero hay algún problema (rendimiento, la pureza, la otra?) Con sólo la captura e ignorando el error?
A veces se leen es caros de producir una excepción pero no estoy seguro de si el autor quiere decir que es caro de construir en las excepciones utilizando el Throw
palabra clave (que no estoy haciendo) o si él quiere decir que es caro para permitir excepciones ocurrir (como yo estaría haciendo).
+1 Una respuesta excelente y bien explicada. Y 100% correcto. –