¿Es legal y posible acceder al valor de retorno en un bloque finalmente?
Pregunta
Deseo establecer una cadena usererror antes de abandonar una función, dependiendo del código de retorno y la variable en la función.
Actualmente tengo:
Dim RetVal as RetType
try
...
if ... then
RetVal = RetType.FailedParse
end try
endif
...
finally
select case RetVal
case ...
UserStr = ...
end select
end try
return RetVal
¿Es posible usar return RetType.FailedParse, luego acceder a esto en el bloque finalmente?
Solución
La única forma real de hacer esto en C # sería declarar una variable al comienzo del método para mantener el valor, es decir,
SomeType result = default(SomeType); // for "definite assignment"
try {
// ...
return result;
}
finally {
// inspect "result"
}
En VB, podría poder acceder al resultado directamente, ya que IIRC funciona como el anterior (con el nombre del método como " resultado ") de todos modos. Advertencia: realmente no soy una persona VB ...
Otros consejos
Declare la variable fuera del bloque try y verifique en el bloque finalmente si se ha establecido.
Me preguntaba si en VB uno podría (legalmente) hacer:
Public Function MyFunc() as integer
Try
if DoSomething() = FAIL Then
return FAIL
end if
Finally
if MyFunc = FAIL then
Me.ErrorMsg = "failed"
endif
End Try
End Function
Sé que configurar MyFunc = FAIL es legal (como un bloqueo de VB), ¿es de solo escritura o legible? Me preocupa que sea una codificación deficiente como
if MyFunc = FAIL Then
es demasiado similar a
if MyFunc() = FAIL Then
¡que tiene consecuencias muy diferentes!