まあ、catch(Exception ex)
は、唯一の違い とcatch(Exception)
としてだけで同じです:catch(Exception ex)
に我々は例外クラス(エラー原因) インスタンスへのアクセスを持っています。あなたは、例えば例外クラスのインスタンスを必要としない場合
try {
...
}
catch (AppServerException e) {
Console.WriteLine("Application server failed to get data with the message:");
Console.WriteLine(e.Message); // <- What's actually got wrong with it
}
:通常、あなたは、元の のメッセージをプリントアウトする例外クラスのインスタンスが必要あなたが 例外を消費するだけの予定で、キャッチ(例外の例)構文が過剰であるとキャッチ(例外)prefferable です:最後に
try {
c = a/b;
}
catch (DivideByZeroException) {
c = Int.MaxValue; // <- in case b = 0, let c be the maximum possible int
}
。 は再throughingせずに、一般的な例外クラスをキャッチしないでください:
try {
int c = a/b;
}
catch (Exception) { // <- Never ever do this!
Console.WriteLine("Oh NO!!");
}
は、あなたが本当にオーノー「と続ける 『』 がちょうどプリントアウト起こっていたものは何でもエラー(CPUから緑ヒュームが含まれている)、」コーディングしたいですか?あなたは、単に `キャッチ{Console.WriteLineを(「オーノーを書くことができますが、どのような例外に興味を持っていない場合は(スタック、メッセージなどの情報)をキャッチしている
tran.Start();
try {
...
tran.Commit();
}
catch (Exception) {
// Whatever had happened, let's first rollback the database transaction
tran.Rollback();
Console.WriteLine("Oh NO!");
throw; // <- re-throw the exception
}
:Exceptionクラス のパターンは次のようなものです");} – Steve
違いは、あなたのプログラムが第1のスニペットで正しく動作しなくなる理由を*いくつか考えていることです。 2番目のスニペットには何もありません。 2番目の方法は、SOユーザーが「うまくいかない、エラーがありました」のような質問をする方法です。このようなコードを書かないでください。 –
@Steve 'catch'と' catch(Exception) 'の間には小さな違いがあります。最初のものはすべての例外オブジェクトを捕捉し、2番目の例外オブジェクトは 'Exception'から派生した例外オブジェクトのみを捕捉します。 C#では、Exceptionから派生したオブジェクトしか投げることができませんが、CLRはより多くをサポートしています。 – user1908061