1

try-catch ブロックを使用して例外を処理できることはわかっています。しかし、Try-Catch の使い方には疑問があります。違いは何ですか

   try
   {
      //Some code
   }
   catch
   {

   }

   try
   {
    //Some code
   }
   catch(Exception)
   {

   }

   try
   {
    //Some code
   }
   catch(Exception oops)
   {

   }

私のプログラムでは、すべての例外をキャッチする必要があり、ログに記録したくありません。上記の Try-Catch ブロックのうち、どれを使用する必要がありますか?

4

9 に答える 9

2

これまでのところcatch (Exception)、最初と 2 番目は同じです。この場合、すべてをキャッチします。のような特定の例外をキャッチしたいUnauthorizedAccessException場合は、次のように 2 番目の例外を使用する必要があります。

try
{
    //Some code
}
catch (UnauthorizedAccessException)
{
    MessageBox.Show(oops.Message);
}

3 番目のケースでは、変数を通じて例外を使用できますoops

例えば:

try
{
    //Some code
}
catch (Exception oops)
{
    MessageBox.Show(oops.Message);
}

または、特定の例外を除いて:

try
{
    //Some code
}
catch (UnauthorizedAccessException oops)
{
    MessageBox.Show(oops.Message);
}
于 2013-04-08T08:29:29.580 に答える
2

パラメータなしで aを使用するcatchことは、すべてのアンマネージ例外がマネージ例外にラップされるため、フレームワーク 2.0 以降では役に立ちません。それ以前は、アンマネージ コードによってスローされた例外をキャッチするために使用できました。

例外からの情報を使用したくない場合は、例外のタイプのみを指定できますが、通常は、情報を取得できるように名前が必要です。

try {
  // some code
} catch(Exception) {
  // i don't care about any information in the Exception object, just the type
}

対。

try {
  // some code
} catch(Exception ex) {
  // use some information from the exception:
  MessageBox.Show("Internal error", ex.Message);
}

例外を処理しやすくするため、できるだけ具体的な例外タイプを常に持つようにしてください。次に、特定性の低い型を追加して、他の例外を処理できます。例:

try {
  // some database code
} catch(SqlException ex) {
  // something in the database call went wrong
} catch(Exception ex) {
  // something else went wrong
}
于 2013-04-08T08:32:59.190 に答える
1

一般的な try catch、これはあらゆるタイプの例外をキャッチします

try
{
   //Some code
}
catch
{

}

これにより、指定した特定のタイプの例外がキャッチされます。複数指定できます。

try
{

}
catch (UnauthorizedAccessException)
{

}

これは上記と同じことを行いますが、例外のプロパティにアクセスできる変数を提供します。

try
{

}
catch (UnauthorizedAccessException ex)
{

}
于 2013-04-08T08:30:44.237 に答える
0

三枚目が最高…

あらゆる種類の特定の例外をキャッチでき、それは正確です...これは、正確な例外を特定するのに役立ち、それらを簡単に修正することもできます

例: DivisionByZeroException、TargetInvocationException、ArrayOutOfBoundException などをキャッチできます...

于 2013-04-08T08:34:46.820 に答える
0

最初と 2 番目の例は同じです。どちらも、例外に関する情報なしで、例外をキャッチします。3 番目の例外は、例外を に保存しますoops。これを使用して、例外に関する詳細情報を取得できます。

于 2013-04-08T08:29:52.730 に答える
0

msdn のドキュメントを参照してください: http://msdn.microsoft.com/en-us/library/vstudio/0yd65esw.aspx

最良の方法は、キャッチするエラーの種類を指定することです。

于 2013-04-08T08:31:11.113 に答える
0

私はそれが同じ機能を持っていると思います-エラーが設定されている場所/または何かが間違っている場所を追跡するには、

このようにtry-catchを使用する

> try {

//some codes 
 }

catch
{
//anything
//e.g.:
MessageBox.Show("Something is wrong!");
}

これは、何か問題があることを示していますが、詳細なレポートは表示されませんでした。(いくつかのエラーを隠す賢い方法は、catch{} xD に何も入れないことですが、これはお勧めできません)

次は、エラーの詳細レポートを表示することです

try
{
//some codes
}

catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}

お役に立てれば!:D

于 2013-04-08T08:46:10.117 に答える
0

最後のものを使用し、例外をきれいに処理する必要があります。

最初の方法も同じですが、「食べる例外」であり、魔女は最悪です。

少なくとも例外をログに記録してください!

于 2013-04-08T08:29:39.423 に答える
0

それらはすべてほとんど同じです (1 つ目は 2 つ目の省略形だと思います)。最後のものとの違いは、例外オブジェクトを変数に入れているため、キャッチで使用できることです。

通常、このようなコードを見ると、アプリケーションのより大きな問題を隠している可能性があるため、一般的には良い考えではないので、心配する傾向があります。

経験則 - できることは処理し、それ以外はすべてバブルアップさせます。

于 2013-04-08T08:29:40.010 に答える