下面的代碼生成一個NullReferenceException
,但不是由try塊(在Debug
和Release
模式)捕獲:突出顯示爲什麼異常未被捕獲?
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!");
}
}
}
}
代替程序中斷和有問題的行:
爲什麼?
更新:如由Scott建議的例外的文本表示:
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,那麼在訪問它之前應該檢查一個空值! –