VB.NETのCatchと同等のC#… When
-
05-07-2019 - |
質問
VB.NETでは、よく Catch… When
:
Try
…
Catch e As ArgumentNullException When e.ParamName.ToUpper() = "SAMPLES"
…
End Try
Catch… When
と同等のC#はありますか?
可能であれば、 catch
内で if
ステートメントを使用することに頼りたくありません。
解決
この機能はC#6向けに発表されました。現在、書き込みが可能です
try { … }
catch (MyException e) when (myfilter(e))
{
…
}
Visual Studioのプレビューをダウンロードできます。 2015 でこれを確認するか、公式リリースを待ちます。
他のヒント
C#には Catch… When
に相当するものはありません。 catch
内の if
ステートメントに頼り、条件が満たされない場合は再スローする必要があります。
try
{
…
}
catch (ArgumentNullException e)
{
if ("SAMPLES" == e.ParamName.ToUpper())
{
… // handle exception
}
else
{
throw; // condition not fulfilled, let someone else handle the exception
}
}
VB Catch When式と同じセマンティクスを再作成しません。 1つの重要な違いがあります。スタックのアンワインドが発生する前にVB When式が実行されます。 whenフィルタの時点でスタックを調べると、実際に例外がスローされたフレームが表示されます。
catchブロックでifを使用するのは、スタックが巻き戻された後にcatchブロックが実行されるため、異なります。これは、エラー報告に関して特に重要です。 VBシナリオでは、障害を含むスタックトレースでクラッシュする機能があります。 C#でその動作を取得することはできません。
編集:
所属していません StackOverflow