如果未处理异常则发出警告

本文关键字:警告 未处理 异常 如果 | 更新日期: 2023-09-27 18:17:11

如果代码有可能抛出未包装在try/catch块中的异常,是否有技术或第三方工具将生成警告?

如果未处理异常则发出警告

我建议您最好考虑一下为什么代码会生成异常,而不是简单地、不加进一步考虑地要求所有代码都用try/catch/finally或其他方式包装。(顺便说一句,如果这是可能的,让它消失将是微不足道的-开发人员可以将主入口点包装在try/catch中,并且没有更多的警告)。

代码契约是一个工具,它不会做你在这里要求的,确切地说,但它会帮助你在编译时通过编译器警告来推断代码的运行时行为。这将告诉您诸如客户端调用何时延迟返回值以及服务方法何时可能返回null之类的事情。这是触及导致异常行为的根源,而不仅仅是要求您处理它们。在这种情况下,你有一个糟糕的编程假设——你不想捕获这个异常,你想通过阻止它发生来消除它。

我会保存异常处理的地方,你正在处理的外部性超出了你的控制(例如,用户拔掉网线,而你的应用程序正在下载一个文件)。在我看来,好像您正在寻找java风格的检查异常,这是c#所没有的。但是,如果您查看外部库的方法XML注释,您可以看到它们可能生成哪些异常,并处理这些特定的情况。如果您只是为了外部性而这样做(并使用代码契约来管理内部假设),那么花费的额外时间不会太多。

有一个大致相同的问题。这就是如何检测代码是否会抛出错误。我不确定这个问题是否会算作欺骗,看起来你想做预编译,得到警告

然而,这个公认问题的答案是:

在我之前的回答之后,我已经设法创建了一个基本的例外者。它使用一个基于反射的ILReader类,可以在罗海波的MSDN博客上找到。(只需添加一个参考项目。)

[…]总而言之,该算法递归枚举(深度优先)any方法在指定的方法中调用,通过读取CIL指令(以及跟踪已经访问过的方法)。它类抛出的集合的单个列表HashSet对象,该对象在最后返回。它另外维护一个局部变量数组和一个堆栈,以便保存跟踪在异常发生后没有立即抛出的异常创建。

如果你不介意做代码分析后编译,并基于il代码,你可以尝试使用片段Noldorin张贴在那个问题。

还有Erik的回答:

异常提供了一种通知系统发生异常情况的方法。它们的存在不是为了提供一种方便的方式让方法与调用代码进行通信。

如果你的方法有通过/失败的情况,那么他们应该返回一个布尔标志。如果它们稍微复杂一些,比如需要返回状态码,那么应该使用结构体或类作为结果。

总结一下:如果你发现自己使用了很多自定义异常,那么你就做错了。