finallyブロックの戻り値にアクセスすることは合法であり、可能ですか?
質問
関数のリターンコードと変数に応じて、関数を終了する前にusererror文字列を設定したい。
現在、次のものがあります:
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
ret RetType.FailedParseを使用して、finallyブロックでこれにアクセスすることは可能ですか?
解決
C#でこれを行う唯一の実際の方法は、メソッドの開始時に値を保持する変数を宣言することです。つまり、
SomeType result = default(SomeType); // for "definite assignment"
try {
// ...
return result;
}
finally {
// inspect "result"
}
VBでは、結果に直接アクセスすることができます -とにかくIIRCは上記のように(メソッド名を「結果」として)動作します。警告:私はVBの人ではない本当にです...
他のヒント
tryブロックから変数を宣言し、finallyブロックが設定されている場合はチェックインします。
VBで(合法的に)次のことができるかどうか疑問に思っていました:
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
MyFunc = FAILの設定は(VBからのハングオーバーとして)正当であることがわかっていますが、書き込み専用ですか、それとも読み取り可能ですか?私は、これが次のような貧弱なコーディングであることに懸念しています
if MyFunc = FAIL Then
に似すぎています
if MyFunc() = FAIL Then
結果はまったく異なります!
所属していません StackOverflow