Est-il légal et possible d'accéder à la valeur de retour dans un bloc enfin?
Question
Je souhaite définir une chaîne d'erreur avant de quitter une fonction, en fonction du code de retour et de la variable dans la fonction.
J'ai actuellement:
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
Est-il possible d'utiliser return RetType.FailedParse, puis d'y accéder dans le bloc finally?
La solution
La seule façon de faire cela en C # serait de déclarer une variable au début de la méthode pour contenir la valeur - c'est-à-dire.
SomeType result = default(SomeType); // for "definite assignment"
try {
// ...
return result;
}
finally {
// inspect "result"
}
En VB, vous pourriez pouvoir accéder directement au résultat - car IIRC fonctionne un peu comme ci-dessus (avec le nom de la méthode comme "résultat"). Mise en garde: Je ne suis vraiment pas une personne de VB ...
Autres conseils
Déclarez la variable du bloc try et cochez le bloc finally si elle a été définie.
Je me demandais si en VB on pouvait (légalement) faire:
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
Je sais que la définition de MyFunc = FAIL est légale (en tant que blocage de VB), est-elle accessible en écriture ou lisible? Je crains qu’il s’agisse d’un mauvais codage
if MyFunc = FAIL Then
est trop similaire à
if MyFunc() = FAIL Then
qui a des conséquences très différentes!