Следующий код создает NullReferenceException
, но не зацепила блоком Ьгу (в обоих 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!");
}
}
}
}
Вместо того, чтобы программы перерывов и ошибочную строку подсвечивается:
Почему?
Update: текстовое представление, за исключением, как было предложено Scott:
System.NullReferenceException occurred
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=ExceptionTest
* Вы, вероятно, * есть ваш отладчик настроен разбить на первый авось исключения. Если вы запустили это без приложенного отладчика, напечатает ли оно «Исключенное исключение»? – vcsjones
также вы пробовали использовать '==', если я не ошибаюсь, он генерирует исключения иначе, чем 'string.Equals (string)' – Andrew
Как правило, это плохая практика, чтобы ловить общие исключения. Это может привести к пространственному и бесстрастному поведению в вашем коде. Не говоря уже о том, что исключения крайне неэффективны. Если переменная может быть нулевой, перед ее доступом вы должны проверить нулевое значение! –