C# で何も行わない一般的な catch ステートメントを作成できるのはなぜですか?[重複]

StackOverflow https://stackoverflow.com/questions/2029650

質問

重複の可能性:
C# で一般的な例外をキャッチできないのはなぜですか?

レビューして書いています サーキットブレーカー 最近のコード。次のメソッドはコンパイルされますが、catch ブロックには入りません。回避策はたくさんありますが、これが正しい動作(例外のフィルタリング)を実現する唯一の方法ではありませんが、興味があります これがコンパイルされても機能しない理由!

public void AttemptCall<TException>(Action action) 
    where TException : Exception
{
    try
    {
        action();
    }
    catch(TException e)  // This block is never entered!
    {
         state.ActUponException(e);
         throw;
    }
}

以下は、前のメソッドの catch ブロックに入るテストです。

[TestMethod]
public void Throw_an_exception()
{
    circuitBreaker.AttemptCall<Exception>(() => throw new Exception());
    // test the circuit breaker's state
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top