2016-04-03 20 views
0

私はしばらく検索してきましたが、簡単な言葉で説明を見つけることができませんでした。私はinner exceptionが何であるかをC#で知る必要があります。単純な例を持つC#.netの内部例外

msdnでは説明していますが、例はあまり明確ではありません。私は簡単な例で説明が必要です。ありがとう

答えて

0

インナー例外はNEST例外にあなたを許す:で

を参照してください。内部例外が新しい例外例外をラップするために使用される

public void ThrowInner() 
    { 
     throw new MyAppException("ExceptExample inner exception"); 
    } 

    public void CatchInner() 
    { 
     try 
     { 
      this.ThrowInner(); 
     } 
     catch (Exception e) 
     { 
     throw new MyAppException("Error caused by trying ThrowInner.",e); 
     } 
    } 
0

。ほとんどの場合、これを行う必要はありません。しかし、あなたが注文を提出するクラスを持っているとします。そのコードは他のクラスを呼び出し、その内部のどこかでNullReferenceExceptionをスローします。

注文をしようとすると、ぼんやりとしたNullReferenceExceptionが表示されます。あなたはこれを行う可能性がありますため提出が何を得る失敗したときに今

try 
{ 
    SubmitOrder(order); 
} 
catch(Exception ex) 
{ 
    throw new OrderSubmitException("An error occurred while placing the order", ex); 
} 

をそれはOrderSubmitExceptionだ、ちょうどNullReferenceExceptionではありません。あなたのログにその情報が表示されたり、アプリケーション内でそれを把握すると、注文時に例外がスローされたことを伝えるのが簡単になります。

しかし、本当に重要な詳細は、新しい例外のInnerExceptionプロパティにあります(元の例外をコンストラクタに渡したためです)。OrderSubmitExceptionがありますが、 stacktrace、InnerExceptionにあります。

実生活では、そうする必要はあまりありません。そのような例外をラップするときはほとんどの場合、不要です。元の例外にはスタックトレースがあり、それで十分です。

多くの場合、何か他のものによってスローされた例外を調べるときにはInnerExceptionが気になります。例外に十分な詳細が含まれていない場合は、InnerExceptionに詳細があり、それ自体にInnerExceptionが含まれていることがあります。

2

:例外Xが前の例外Y. 例の直接の結果としてスローされる

var exception1 = new Exception("This is the inner exception"); var exception2 = new Exception("This is the outer exception",exception1);

関連する問題