gpt4 book ai didi

.net - 引发NullReferenceException时检测目标对象是什么

转载 作者:行者123 更新时间:2023-12-03 09:09:48 25 4
gpt4 key购买 nike

我确信我们都在某个时候收到了一个非常模糊的“对象引用未设置为对象实例”的异常。确定问题所在的对象通常是繁琐的任务,设置断点并检查每个语句中的所有成员。

是否有人通过编程方式或其他方式轻松有效地识别导致异常的对象?

- 编辑

似乎我像异常(exception)=)一样模糊。关键是_不必调试应用程序即可找到错误的对象。编译器/运行时确实知道该对象已被分配/声明,并且该对象尚未实例化。有没有一种方法可以提取/识别捕获的异常中的那些详细信息

@ W.克雷格操盘手

您对这是设计问题的结果的解释可能是我可以获得的最佳答案。我对防御性编码相当强制,并且随着时间的流逝,我已经设法摆脱了大多数这些错误。剩下的只是来调整我无休止,并让我向社区发布此问题。

感谢大家的建议。

最佳答案

在抛出NRE的时候,没有目标对象-这就是异常(exception)。您最希望得到的是捕获发生异常的文件和行号。如果您在确定导致问题的对象引用方面遇到问题,则可能需要重新考虑您的编码标准,因为听起来您在一行代码上做得太多。

更好的解决方案是Design by Contract,它可以通过内置语言构造或通过库来实现。 DbC建议建议针对超出范围的数据(即:Null)的方法预先检查所有传入参数,并抛出异常,因为该方法不适用于不良数据。

[编辑以匹配问题编辑:]

我认为NRE的描述会误导您。 CLR存在的问题是,当对象引用为Null时,要求它取消引用对象引用。请看以下示例程序:

public class NullPointerExample {
public static void Main()
{
Object foo;
System.Console.WriteLine( foo.ToString() );
}
}

运行此命令时,它将尝试在foo上评估ToString()方法时在第5行上抛出NRE。没有要调试的对象,只有未初始化的对象引用(foo)。有一个类和一个方法,但是没有对象。

回复:克里斯·马拉斯蒂·乔治的 answer:

您永远不要自己丢掉NRE-这是具有特定含义的系统异常:CLR(或JVM)已尝试评估未初始化的对象引用。如果您预先检查对象引用,则抛出某种无效的参数异常或特定于应用程序的异常,但不抛出NRE,因为您只会使下一个必须维护您的应用程序的程序员感到困惑。

关于.net - 引发NullReferenceException时检测目标对象是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/115573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com