以某种方式可以看到何时捕获NullReference异常哪个字段为空?
我知道您可以读取堆栈跟踪行号,但在该行可能有多个字段可能导致NullReference异常。
我担心这是不可能的,但如果是这样,为什么技术上不可能呢?
答案 0 :(得分:0)
是的,这是可能的。您可以将变量的范围限定在try-catch之外,然后将它们添加到异常中。但是在使用它们之前,你应该检查你的可空变量是否为null。如果你不是100%确定它不能为空,那么总是最好。
此代码在Console.WriteLine();
崩溃,但现在我确切地知道导致它的参数:
int? a = (int?)null;
int? b = (int?)null;
try
{
Console.WriteLine(a.Value + b.Value);
}
catch (Exception ex)
{
ex.Data.Add("a", a);
ex.Data.Add("b", a);
throw;
}
答案 1 :(得分:0)
您来自System.Diagnostics.Contracts ns Code Contracts之后。它出现在.NET FW 4.0中我认为。 它可以评估代码中的前后条件,避免出现黑暗NullReferenceException等问题。你低音地这样做:
Contract.Requires(x!= null);
答案 2 :(得分:0)
好吧,遗憾的是我没有看到这些问题:
Can Visual Studio tell me which reference threw a NullReferenceException? (感谢@anaximander)
Detecting what the target object is when NullReferenceException is thrown (感谢@Rohit Vats)
这些答案解释得很清楚。