0

どうすれば例外を適切にスローできますか?

public void Test() 
{
 if (error != 0) {
  string msg = "Error";
  throw new Exception(msg);
 }

  // Other function
  ...
}

私もthrow new Exception(msg);ロガーで変更しました

public void Test()
{
 if (error != 0) {
  string msg = "Error";
  //throw new Exception(msg);
  logger.Error(msg);
 }

  // Other function
  ...
}

エラーが発生したときに関数を終了するには、Exit関数を使用する必要がありますか?

よろしくお願いします。

4

2 に答える 2

2

例外をスローする前にログに記録したい。

また、System.Exception から継承する例外の型をスローして、コンシューマーが特定の型をキャッチできるようにする必要もあります。

例外をスローすると関数が終了するため (実際には、finally ブロックがある場合は最初に処理されます)、スローするだけで済みます。

また、エラー状態で別の例外をキャッチしている場合は、ログに記録してから単純に throw を呼び出すことができます。元の例外をスローし、スタックを破棄しないようにします。その場合に独自の例外タイプをスローする場合は、元の例外を内部例外として含めることができます

catch (Exception e)
{
    // log exception details
    throw;
}

また ...

catch (Exception e)
{
    // log exception details
    throw new MyCustomException("message", e);   // inherits from Exception
}

最後の 1 つの利点 (該当する場合) は、特別な処理に関心がある場合、消費者が MyCustomException をキャッチできることです。

于 2012-05-23T02:26:53.640 に答える
1

例外の意図は、あなたがそうするなら、「優雅ではない」ことです。本当に致命的であり、プログラムを続行したくない場合を除き、Exit を呼び出さないでください。クライアント コードは例外をキャッチし、終了するかどうかを評価する必要があります。

また、エラーをログに記録したい場合は、throw.

ps。キーワードの後に​​関数の名前を付けないでください ....

于 2012-05-23T02:28:36.637 に答える