C#/.NET 中方法的自动记录异常 [关闭]

2024-02-15

我想要一些工具,最好是能够插入 VS 2008/2010 的工具,它将遍历我的方法并添加有关它们可能抛出的异常的 XML 注释。我不想要<summary>或为我生成的其他 XML 标签,因为我会自己填写这些标签,但如果即使在private/protected方法我可以看到哪些异常可以抛出。否则,我发现自己遍历这些方法并将鼠标悬停在其中的所有方法调用上以查看异常列表,然后更新该方法的<exception列出包括那些。也许 VS 宏可以做到这一点?

由此:

private static string getConfigFilePath()
{
    return Path.Combine(Environment.CurrentDirectory, CONFIG_FILE);
}

To this:

/// <exception cref="System.ArgumentException"/>
/// <exception cref="System.ArgumentNullException"/>
/// <exception cref="System.IO.IOException"/>
/// <exception cref="System.IO.DirectoryNotFoundException"/>
/// <exception cref="System.Security.SecurityException"/>
private static string getConfigFilePath()
{
    return Path.Combine(Environment.CurrentDirectory, CONFIG_FILE);
}

Update:看起来该工具必须递归地遍历这些方法,例如,方法 1 调用方法 2,方法 2 调用方法 3,方法 3 被记录为抛出异常NullReferenceException,因此 method2 和 method1 都被该工具记录为抛出NullReferenceException。该工具还需要消除重复项,例如方法中的两个调用被记录为抛出DirectoryNotFoundException,该方法只会列出<exception cref="System.IO.DirectoryNotFoundException"/> once.


长而短的答案是这是不可能的。与 Java 不同,.NET 语言都不要求函数报告可能引发的异常列表(这意味着您必须捕获或报告其调用的函数可能引发的任何异常)。因此,没有通用的方法来确定函数可能抛出的每个异常的详尽列表(我在这里使用“函数”一词来涵盖任何异常)written就像一个函数,包括运算符、构造函数等),因为您无法保证给定函数可能调用的内容可能引发异常。

如果您愿意进行限制,那么可以想象您可以编写一些内容来扫描 MSDN 以查找给定 .NET 库调用的相应文章,并使用那里的异常列表(如果有)递归地建立一个列表可能会抛出什么。但是,这不会覆盖任何第三方库或捕获运行时引发的任何异常(OutOfMemoryException, StackOverflowException, NullReferenceException[除非您想更进一步,让异常分析也确定是否存在空引用的可能性,但这在完全通用的意义上似乎也是不可能的])。

我很确定 C# 团队已经对此进行过一两次讨论(如果 Eric Lippert 还没有回答有关此问题的问题,我会感到惊讶),但我很确定它归结为对此:虽然这种系统很有用且有价值对某些人来说,强制使用它(并强迫您报告或捕获所有可能抛出的异常)导致了很多try { ... } catch (Exception ex) { ... }阻止以避免内务处理,而一揽子、沉默的捕获比未报告的异常要糟糕得多(恕我直言)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#/.NET 中方法的自动记录异常 [关闭] 的相关文章

随机推荐

  • 用于逐步删除随机项的首选 Scala 集合?

    我有一个需要多次迭代的算法 每次迭代都会对集合中的项目进行评分并删除得分最高的项目 我可以填充一个Vector与初始种群一起 不断将其替换为var 或者选择一个可变集合作为val 哪个可变集合最符合要求 你可以考虑一个DoubleLinke
  • 获取控制器内的环境

    我的一个控制器中有一种情况 只能通过 AJAX 访问 我有以下代码 if request gt isXmlHttpRequest response new Response response gt setContent AJAX reque
  • 如何隐藏UINavigationBar 1px底线

    我有一个应用程序 有时需要其导航栏才能与内容融为一体 有谁知道如何摆脱或改变这个烦人的小条的颜色 在下图中我遇到的情况 我正在谈论 根视图控制器 下方的这条 1px 高度线 对于 iOS 13 Use the shadowColor htt
  • 一次查找多个地方的纬度和经度

    我有一长串城镇和城市列表 我想为每个城镇添加纬度和经度信息 有谁知道一次生成此信息的最简单方法 也可以看看对多个地址进行地理编码 https stackoverflow com questions 396819 geocode multip
  • 使用scale_fill_binned()时如何使用特定的填充颜色?

    我想使用我自己的填充颜色 例如 c red blue grey50 black 使用函数时scale fill binned 在 ggplot 代码中 我怎样才能做到这一点 这是一个最小的可重现示例 library tidyverse da
  • 接受可变数量参数的函数

    在本文档中 https developer apple com library prerelease ios documentation Swift Conceptual Swift Programming Language GuidedT
  • 我可以用 AngularJS 更改 Accept-Language 请求标头吗

    有没有办法更改或编辑我发送到 API 的接受语言标头 javascript Jquery 或 Angular 有没有办法 我不想发送默认的 而是发送我的 Cookie 的 在 AngularJS 中 您可以使用以下方法设置通用标头 http
  • 如何访问 Gradle 使用的“java.home”?

    gradlew properties显示没有具有以下值的属性 JAVA HOME 并且以下发出错误 指示不存在此类属性 println org gradle java home println gradle java home printl
  • 在 Google Chrome 扩展中使用 jQuery.ajax

    我使用 jquery ajax 函数将数据从 google chrome 扩展发布到我的网络服务 代码如下 ajax type POST url serviceUrl data data success function msg if ty
  • 将季度/年份格式转换为日期

    我创建了一个函数 将季度年格式的向量强制转换为日期向量 quarter to date c Q1 13 Q2 14 1 2013 03 01 2014 06 01 这是我的函数的代码 quarter to date lt function
  • 用鼠标拖动滚动

    我正在尝试制作一个可滚动面板 但没有滚动条 并通过用鼠标垂直拖动来滚动 这是到目前为止有人帮助我做的 private void panel1 MouseEnter object sender EventArgs e panel1 AutoS
  • 哪个更快? ByVal 还是 ByRef?

    在 VB NET 中 使用方法参数速度更快 ByVal or ByRef 另外 哪个在运行时消耗更多资源 RAM 我通读了这个问题 https stackoverflow com questions 290189 best practice
  • 多对多 EF7

    Models public partial class Film public int FilmID get set public virtual ICollection
  • 单例模板作为 C++ 中的基类[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 根据C 单例设计模式 https stackoverflow com questions 1008019 c singleton design
  • 通过 Socket.io 更新 React 状态

    我的 React 组件使用来自 socket io 的数据作为状态 我不确定如何在更新数据时更新状态而不重新渲染整个组件 示例代码 var socket io var data components key name markup sock
  • nginx 将 POST 请求重定向到 GET 请求

    我有 Rails 4 1 应用程序运行puma网络服务器 我使用 nginx 作为代理服务器 几天前 一切都进展顺利 我更新了我的应用程序 突然有些POST请求开始重定向到相同的网址 但作为GET要求 我尝试回滚到以前的工作版本 但没有成功
  • 在 C# 中以编程方式编译打字稿?

    我正在尝试用 C 编写一个函数 该函数接受包含打字稿代码的字符串并返回包含 JavaScript 代码的字符串 有这方面的库函数吗 您可以使用Process要调用编译器 请指定 out file js到临时文件夹并读取编译文件的内容 我做了
  • 如何找到所有兄弟情谊字符串?

    我有一个字符串和另一个包含字符串列表的文本文件 当两个字符串按字母顺序排序后完全相同时 我们将它们称为 兄弟字符串 例如 abc 和 cba 会被排序为 abc 和 abc 所以原来两者是兄弟关系 但 abc 和 aaa 则不然 那么 有没
  • Windows 上 Python 3.1 的 SendKeys

    最新的 Python Sendkeys 模块适用于 Python 2 6 我无法自己升级它 因为它需要重新编译 C 模块 有谁知道将密钥发送到窗口的相当简单的替代方法 使用 win32ui FindWindow 我可以找到正确的窗口 然后使
  • C#/.NET 中方法的自动记录异常 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想要一些工具 最好是能够插入 VS 2008 2010 的工具 它将遍历我的方法并添加有关它们可能抛