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