【问题标题】:How to find which parts of C# code may throw exceptions如何查找 C# 代码的哪些部分可能引发异常
【发布时间】:2020-02-18 05:50:17
【问题描述】:

有没有办法让 Visual Studio 告诉我代码的哪些部分可能抛出异常?类似编译器警告的东西可以被抑制,但它警告我如果某些行没有被trycatch 包围,它可能会引发异常。

【问题讨论】:

  • .NET 不像 Java 那样检查异常。有时您不希望尝试/捕获某些东西,因为您无法处理您可能期望的任何异常。现实情况是,你会在所有地方压制警告,远远超过你意识到的。这会在您的代码中产生太多噪音。
  • 几乎每一行都可以抛出异常...包括类/方法声明(也将在这些行上报告不必要的缺失类型)...如果您可以缩小范围你想实现社区可能会提出一些建议......(我很确定没有你正在寻找的确切功能,因为它并不完全有用)
  • 您可能需要研究静态代码分析工具 (SCA)。有些工具就在那里,有些比其他的更贵。通过使用它们,您可以通过修复和应用预防性编程来学习。
  • @MichaelRandall 这不仅仅是关于代码,更多的是关于 Visual Studio 中的功能。 Visual Studio 有时可以警告程序员一些“错误”或不建议在代码中完成的事情。我想知道的是,如果有这样的功能会告诉我:“此方法可能会引发异常,请考虑将其包围在 try / catch 块中”。
  • 随意编写一个代码分析器来做到这一点。但是,您应该知道,即使是最细心的开发人员也经常会忘记它们,因此您只能任由为您正在使用的库编写 XML 文档的人摆布。

标签: c# visual-studio visual-studio-2019


【解决方案1】:

不,VS中没有这样的功能。

C#(和一般的 .Net)不支持任何类型的注释来指定“方法抛出有趣的异常”(与 Java 不同,请参阅 Why are Exceptions not Checked in .NET?)。因此,没有任何通用工具可以让您知道任何给定方法都可以抛出一些“有趣”的异常(IOException,正如您所建议的)。

在某些情况下 VS/C# 编译器可以提供帮助。 IE。在 C# 8 NRE 实际上有部分特殊处理 - "nullable reference type" 让编译器知道代码是否需要 null 并在编译时警告 null 是否通过了不应该的地方。

注意:XML 文档(在 cmets 中被提及为智能感知工具提示的来源)不是代码的一部分,并且不要求它正确/完整。大部分代码没有任何有用的 XML 文档,并且文档在编译时没有必要可用。因此,虽然它可以作为某些工具的基础,但我不相信 VS 将它用于任何代码突出显示。

【讨论】:

    【解决方案2】:

    ReSharper 通常会这样做。它为可能的异常添加了一些警告。 如果您不想使用它,请搜索类似产品。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 2012-04-29
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多