次のコードNullReferenceException
を生成しますが、(両方Debug
とRelease
モード)tryブロックでキャッチされていません。その代わり例外がキャッチされないのはなぜですか?
using System;
namespace ExceptionTest {
public class Program {
public static void Main(string[] args) {
String text = null;
try {
if (text.Equals("t1")) {
Console.WriteLine("r1");
} else {
Console.WriteLine("r2");
}
} catch(Exception ex) {
Console.WriteLine("Exception catched!");
}
}
}
}
プログラムブレークや問題のある行が強調表示されています:
をなぜですか?
更新:スコットによって示唆されるように、例外のテキスト表現:例外設定で、例えば画像上
System.NullReferenceException occurred
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=ExceptionTest
あなたはおそらく* *あなたのデバッガは、初回例外でブレークするように設定しました。デバッガを接続せずにこれを実行すると、 "Exception catched"と表示されますか? – vcsjones
また、私が 'string.Equals(string) 'と違って例外をスローしたと誤解されていない場合は、' == 'を使ってみましたか? – Andrew
一般的な例外をキャッチするのは悪い習慣です。これは、あなたのコード内でスパースな、そして追跡不能な振る舞いにつながる可能性があります。例外的に例外的に非常にパフォーマンスの高いものはありません。 変数にnullを指定できる場合は、アクセスする前にnull値をチェックする必要があります。 –