我正在尝试捕获nullreference异常,但我想知道确切的位置(在哪个点或行我得到该异常)。我有一个名为Employee
的类,它有两个属性:_Id
和_Name
。
static void Main(string[] args)
{
Employee empobj = new Employee();
try
{
empobj = null;
//empobj._Id = empobj._Id.ToString();
Console.WriteLine(empobj._Id);
Console.WriteLine(empobj._Name);
Console.ReadLine();
}
catch (NullReferenceException e)
{
Console.WriteLine("Exception caught: {0}", e.InnerException);
Console.ReadLine();
}
}
答案 0 :(得分:3)
在visual studio中,转到Debug-> Exceptions菜单。
然后选择“Common Language Runtime Exceptions”,选中“Thrown”复选框。这将在抛出异常时中断执行。你可以发现断线就是抛出异常的地方。
如果是NullReferenceException
,你将无法获得有关堆栈跟踪的大量帮助,但这样你就可以轻松搞定原因。
答案 1 :(得分:2)
查看堆栈跟踪,它将分解执行树,说明行号以及函数名称等等。您可以通过调试,将异常堆栈跟踪输出到某个介质,或者删除try / catch并让异常停止执行应用程序来完成此操作。
但关键是要解决异常,以便它不会发生,如果不是特殊情况(即如果你认为这是一个非常好的情况发生);所以,如果您的应用程序可以检查,例如
if (thing != null) {
var id = thing.Id;
if (id != null) {
var idText = id.ToString();
// and so on
}
} else {
}
在其他地方,你要么继续不同的路线,要让用户重试或其他。
如果它是一个真正特殊的情况(即事情永远不应该为空)并且应用程序如果不能做任何事情,那么让异常发生,它会破坏应用程序。
答案 2 :(得分:2)
堆栈跟踪是可行的方法,但异常来自以下几行:
Console.WriteLine(empobj._Id);
Console.WriteLine(empobj._Name);
您正在将employee对象设置为null
empobj = null;
然后尝试从该类访问成员变量,该变量将不再具有这些变量的值