【问题标题】:Can we get a canthrow statement in C#? [closed]我们可以在 C# 中得到一个 canthrow 语句吗? [关闭]
【发布时间】:2010-03-04 21:15:46
【问题描述】:

作为一名优秀的程序员和代码审查员,当我看到开发人员捕获“异常”时,我总是畏缩不前。我本来打算建议 C# 添加 Java 中的“throws”子句,但在阅读了 Anders Hejlsberg 采访 (http://www.artima.com/intv/handcuffs.html) 之后,我明白为什么它不存在了。

相反,我想建议 canthrow 声明。 canthrow 语句将具有以下属性

  1. canthrow 语句将在方法上声明并列出该方法抛出的异常。
  2. canthrow 将向调用方法报告或智能感知可以抛出的异常,以及被调用方法可能抛出但未在本地处理的任何异常。
  3. canthrow 不是契约性的,所以版本控制不是问题。

这里的想法是大多数开发人员都希望捕获和处理适当的异常,但他们根本不知道它们是什么。如果我们有办法在设计时检查方法,开发人员将更有可能添加和处理相关的异常,并让未处理的异常冒泡。

现在作为最后的想法,您可能会说这一切都可以通过 Intellisense 使用反射来完成,但这会返回所有可能的异常。 canthrow 将允许库开发人员强调调用者应该处理的异常。

你怎么看?

【问题讨论】:

    标签: c# java language-features


    【解决方案1】:

    这在某种程度上已经以<exception> documentation comment tag 的形式提供。可以通过使用 FxCop 内省之类的方法检查调用树来进行更深入的挖掘,但是一旦涉及到虚拟方法,它可能很快就会变得混乱。

    至于编辑器集成,在 Resharper 中请求这样的功能可能比在 Visual Studio 本身中获得支持要好。

    【讨论】:

      【解决方案2】:

      我不确定它会给你带来什么上面的文档,因为该方法通常不能保证不会抛出其他异常。例如,考虑一个线程被中止的情况。

      【讨论】:

        猜你喜欢
        • 2012-08-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-23
        • 1970-01-01
        • 2021-08-01
        • 2021-04-10
        • 1970-01-01
        • 2011-12-10
        相关资源
        最近更新 更多