VB.NETでは私はよくCatch…When
:
Try
…
Catch e As ArgumentNullException When e.ParamName.ToUpper() = "SAMPLES"
…
End Try
に相当するC#はありCatch…When
ますか?
可能であればif
、a内のステートメントを使用することに頼りたくありません。catch
VB.NETでは私はよくCatch…When
:
Try
…
Catch e As ArgumentNullException When e.ParamName.ToUpper() = "SAMPLES"
…
End Try
に相当するC#はありCatch…When
ますか?
可能であればif
、a内のステートメントを使用することに頼りたくありません。catch
Catch…When
C#に相当するものはありません。あなたは本当にあなたのif
中にある声明に頼らcatch
なければならないでしょう、そしてあなたの条件が満たされないならばそれから再投げます:
try
{
…
}
catch (ArgumentNullException e)
{
if ("SAMPLES" == e.ParamName.ToUpper())
{
… // handle exception
}
else
{
throw; // condition not fulfilled, let someone else handle the exception
}
}
この機能は C# 6 で発表されました。
try { … }
catch (MyException e) when (myfilter(e))
{
…
}
Visual Studio 2015のプレビューを今すぐダウンロードして確認するか、公式リリースを待つことができます。
これは、VB Catch When 式と同じセマンティクスを再作成しません。重要な違いが 1 つあります。VB When 式は、スタックの巻き戻しが発生する前に実行されます。when フィルターの時点でスタックを調べると、例外がスローされたフレームが実際に表示されます。
スタックが巻き戻された後に catch ブロックが実行されるため、catch ブロックに if があるのは異なります。これは、エラー報告に関しては特に重要です。VB シナリオでは、障害を含むスタック トレースでクラッシュする可能性があります。C# でその動作を取得することはできません。
編集:
この件について詳細なブログ記事を書きました。