amu*_*tha 7 c# nullreferenceexception
技术负责人问我以下内容:
他创建了一个类,声明了一个对象并对其进行了初始化.但在某些情况下,我们可能会得到"空引用"异常.
他评论说,这种例外有1000种可能的原因,并让我猜出一个原因.
我无法弄清楚.什么是原因,我们可能会得到这样的例外?
eri*_*len 11
throw new NullReferenceException()(顺便说一下,您不应该这样做).我不知道这是否重要,因为它不是真正的空引用.我想不出任何其他997个原因.
编辑:谢谢,Mark Byers,第3点.
我能想到的几种方式:
NullReferenceException在完成之前抛出一个.NullReferenceException.try { } finally { }代码,如果它抛出异常,则finally运行,finally中的代码可以抛出一个NullReferenceException.NullReferenceException.这是最后一个的示例代码:
class Foo {}
class Bar
{
public static implicit operator Foo(Bar bar)
{
throw new NullReferenceException();
}
}
class Program
{
public static void Main()
{
Foo foo = new Bar(); // This causes a NullReferenceException to be thrown.
}
}
Run Code Online (Sandbox Code Playgroud)
他创建了一个类,声明了一个对象并对其进行了初始化.但在某些情况下,我们可能会得到"空引用"异常.他评论说,这种例外有1000种可能的原因,并让我猜出一个原因.我无法弄清楚.什么是原因,我们可能会得到这样的例外?
直截了当的回答:我告诉面试官你不能调试你看不到的代码.要求查看有问题的代码行和调试器.
不那么直截了当的答案:假设你的面试官不是白痴,他可能会因为你的调试技巧而感到沮丧.如果你得到一个糟糕的错误报告,你是否会立即投掷并投降,或者你是否尝试解决它.
猜测不是调试错误的可接受方式.第一步是重现你机器上的错误.
它可靠地重现吗?如果是,请调试您的调试器.
如果不是,您可以间歇性地或非确定性地再现它吗?异常是在代码中的不同位置或不同的线程上随机发生的吗?如果是,你可能有某种竞争条件,或者可能是一个损坏的指针.
如果不是,请询问发现错误的人是否重现.当您按照与最初发现错误的人相同的步骤时,您可以重现吗?如果是,请参阅上文.
如果不是,环境是否存在差异?配置文件?数据库中的数据?是否使用最新的服务包,软件更新等更新了环境?
您将无法向面试官提供答案,但您可以向他提供一系列步骤,以便最终得到答案.
不是专家,只是凭空猜测,记不清了?