質問

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#でその動作を取得することはできません。

編集:

を書きましたこの件に関する詳細なブログ投稿

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top