14

VB.NETでは私はよくCatch…When

Try
    …
Catch e As ArgumentNullException When e.ParamName.ToUpper() = "SAMPLES"
    …
End Try

に相当するC#はありCatch…Whenますか?

可能であればif、a内のステートメントを使用することに頼りたくありません。catch

4

3 に答える 3

15

Catch…WhenC#に相当するものはありません。あなたは本当にあなたのif中にある声明に頼らcatchなければならないでしょう、そしてあなたの条件が満たされないならばそれから再投げます:

try
{
    …
}
catch (ArgumentNullException e)
{
    if ("SAMPLES" == e.ParamName.ToUpper())
    {
        … // handle exception
    }
    else
    {
        throw;  // condition not fulfilled, let someone else handle the exception
    } 
}
于 2008-10-08T03:07:20.757 に答える
14

この機能は C# 6 で発表されました。

try { … }
catch (MyException e) when (myfilter(e))
{
    …
}

Visual Studio 2015のプレビューを今すぐダウンロードして確認するか、公式リリースを待つことができます。

于 2014-04-09T10:14:16.870 に答える
12

これは、VB Catch When 式と同じセマンティクスを再作成しません。重要な違いが 1 つあります。VB When 式は、スタックの巻き戻しが発生する前に実行されます。when フィルターの時点でスタックを調べると、例外がスローされたフレームが実際に表示されます。

スタックが巻き戻された後に catch ブロックが実行されるため、catch ブロックに if があるのは異なります。これは、エラー報告に関しては特に重要です。VB シナリオでは、障害を含むスタック トレースでクラッシュする可能性があります。C# でその動作を取得することはできません。

編集:

この件について詳細なブログ記事を書きました。

于 2008-10-08T03:51:00.730 に答える