É legal e possível acessar o valor de retorno em um bloco finalmente?
Pergunta
Desejo definir uma string do usuário antes de deixar uma função, dependendo do código de retorno e da variável na função.
Eu tenho atualmente:
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
É possível usar o retorno Rettype.FailedParse e depois acessar isso no bloco finalmente?
Solução
A única maneira real de fazer isso em C# seria declarar uma variável no início do método para manter o valor - ou seja,
SomeType result = default(SomeType); // for "definite assignment"
try {
// ...
return result;
}
finally {
// inspect "result"
}
Em VB, você poderia Ser capaz de acessar o resultado diretamente - como o IIRC, ele meio que funciona como o acima (com o nome do método como "resultado") de qualquer maneira. Advertência: Eu sou verdade Não é uma pessoa VB ...
Outras dicas
Declare a variável fora do bloco de tentativa e verifique o bloco Finalmente se tiver sido definido.
Eu queria saber se no VB alguém poderia (legalmente) fazer:
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
Eu sei que definir myfunc = falha é legal (como uma hanguarda do VB), é apenas uma gravação ou legível? Minha preocupação é que isso seja fraco codificação como
if MyFunc = FAIL Then
é muito semelhante a
if MyFunc() = FAIL Then
que tem consequências muito diferentes!