捕获NullReference异常时获取哪个字段为空?

时间:2014-04-05 14:49:36

标签: c# .net exception-handling

以某种方式可以看到何时捕获NullReference异常哪个字段为空?

我知道您可以读取堆栈跟踪行号,但在该行可能有多个字段可能导致NullReference异常。

我担心这是不可能的,但如果是这样,为什么技术上不可能呢?

3 个答案:

答案 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)

这些答案解释得很清楚。