È legale e possibile accedere al valore di ritorno in un blocco finally?
Domanda
Desidero impostare una stringa usererror prima di lasciare una funzione, a seconda del codice di ritorno e della variabile nella funzione.
Al momento ho:
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
È possibile utilizzare return RetType.FailedParse, quindi accedervi nel blocco finally?
Soluzione
L'unico vero modo per farlo in C # sarebbe dichiarare una variabile all'inizio del metodo per contenere il valore - cioè
SomeType result = default(SomeType); // for "definite assignment"
try {
// ...
return result;
}
finally {
// inspect "result"
}
In VB, potresti essere in grado di accedere direttamente al risultato - poiché IIRC funziona in qualche modo come sopra (con il nome del metodo come "risultato"). Avvertenza: sono davvero non una persona VB ...
Altri suggerimenti
Dichiara la variabile fuori dal blocco try e controlla se il blocco finally è stato impostato.
Mi chiedevo se in VB si potesse (legalmente) fare:
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
So che l'impostazione di MyFunc = FAIL è legale (come hang-over da VB), è di sola scrittura o leggibile? La mia preoccupazione è che questo sia un codice scadente come
if MyFunc = FAIL Then
è troppo simile a
if MyFunc() = FAIL Then
che ha conseguenze molto diverse!