我想要一种方法来获取警告,当一个对象引用可能会抛出一个空引用异常时,这样我就可以为它们编写防御性代码。
我看过Resharper,但没有看到任何可以实现此目的的东西。
代码合约可能不是首发;应用程序非常庞大,并且在代码合同正式发布之前,它是用.NET 3.5编写的。
答案 0 :(得分:3)
Resharper实际上确实做到了这样的事情。可能的NullReferenceExpections在IDE中以蓝色突出显示,当您将鼠标悬停在它们上时会显示工具提示。
Resharper然后在它自己的检查结果窗口中跟踪潜在的错误和警告(与Visual Studio的编译器错误和警告分开)。
答案 1 :(得分:0)
一般来说,除非你专门初始化一个对象,否则它总是有可能抛出一个空对象引用,至少就编译器而言。
为了使算法检查对象的引用是否可能为null,它必须遍历程序可以采用的每个可能路径,并且包括您可能正在使用的任何外部库中的路径。即使对于最简单的程序,这样的算法也会破坏编译器的性能。
答案 2 :(得分:0)
我反对盲目地为代码中和每个方法中可用的每个字段防御null的想法。
以下帮助我决定在哪里检查空值:
1-谁将调用您的方法?
如果一个方法是私有的并且您可以控制它的访问方式,那么我认为防止空检查是不合理的,除非它是方法逻辑的一部分,以期望空值。
如果一个方法暴露给公众(例如API),那么当然空检查应该是一个巨大的问题。
2-软件设计:
您拥有的图像正在调用method1(fromAnimalToString(animal));
,由于某种原因,fromAnimalToString()
永远不会返回null(尽管可能会返回一个空字符串)。
那么在这种情况下,检查method1()的正文
animal != null
是没有意义的
3-测试:
在软件工程中,几乎不可能测试所有可能执行的场景。但是,请测试正常和替代方案,并确保流程符合预期。