Если вы получаете "объект, на который ссылаются, не установлен в качестве экземпляра объекта" (NullReferenceException
), то, скорее всего, они фактически не поймали исключение.
Если вы хотите перехватитьв этом конкретном случае (и пусть другие ошибки, о которых вы не знаете и не можете их обработать, - правильный способ обработки исключений), вы можете попытаться получить информацию из стека, включенную в исключение:
class Program
{
public static void DoSomething()
{
string blah = null;
Console.WriteLine(blah.Length);
}
static void Main(string[] args)
{
try
{
DoSomething();
}
catch (NullReferenceException e)
{
string methodName = e.TargetSite.Name;
Console.WriteLine(methodName);
System.Diagnostics.StackTrace trace =
new System.Diagnostics.StackTrace(e, true);
int lineNumber = trace.GetFrame(0).GetFileLineNumber();
Console.WriteLine(lineNumber);
if(methodName == "DoSomething" && lineNumber == 13)
{
ShowErrorToUser(); // Todo: Implement this
}
else
{
throw; // Just re-throw the error if you don't know where it came from
}
}
}
}
Редактировать
В комментариях обнаружил, что он действительно перехватывается и отображается в окне сообщения.
Я оставлю этот ответ, так какэто применимо к аналогичной ситуации, но не применимо к этой ситуации.Вместо этого смотрите ответ ОскарМК.