c# - 通知方法调用者该方法抛出的异常类型的属性

标签 c# exception custom-attributes

我不打算实现 Java“throws”关键字。参见 http://www.artima.com/intv/handcuffsP.html讨论 throws 关键字的优点以及为什么它没有在 C# 中实现。

但是,我很好奇是否有一种方法可以创建如下所示的属性:

[ThrowsException( exceptionType = NullReferenceException )] 
[ThrowsException( exceptionType = AuthenticationException )]
public void Login( Credentials credz ) 
{
    // ... etc...
}

这样 - 当调用一个用一个或多个 ThrowsException 属性修饰的方法时,该方法抛出的异常类型(至少是那些由 ThrowsException 属性显式声明的异常类型)将在方法的文档中可见

这与 Java 的“throws”关键字不同,因为它不需要调用者处理这些异常。这样做可能会引入重大变化,例如在不处理版本更改引入的新异常的客户端应用程序中。

虽然可以使用:

/// <exception cref="member">description</exception>

我使用属性的意图是,如果异常的名称已更改或异常不再存在,则项目不会编译。因此,How To Document Thrown Exceptions , 不是同一个问题。


更新时间:2013-05-23

我找到了一种通过使用属性而不使用插件来解决问题的方法。我将在本周末尝试解决这个问题,如果它按预期工作,我将很乐意发布解决方案。如果有人打败我发布解决方案,我会很乐意接受他们的回答。

由于我要到星期一才能解决这个问题,所以如果你能比我快,我会提供赏金 - 一个可接受的答案是:

  • (不包括使用 Visual Studio 插件或任何第三方工具
  • && 提供一种在 XML 文档中包含异常的方法
  • && 确保在编译期间强制执行类型安全 )
  • ||证明无法满足上述三个要求,才能为本题提出的问题提供解决方案

我认为 XML 文档在构建项目之前不反射(reflect) ThrowsException 属性中的异常是可以接受的。

看到基于 Resharper 的解决方案会很有趣(因为它对我工作过的大多数开发商店都很常见),但如果有一个与第三方工具无关的解决方案,它不会被接受.类似地,仅在 Visual Studio 中工作的解决方案将比依赖于 Resharper 的解决方案被接受,但如果存在可在其他 IDE 中工作的解决方案,则不会被接受,例如MonoDevelop(支持更多框架 - 甚至更好)。

最佳答案

在 C# 中,您使用 XML 文档记录类及其成员。在 Visual Studio 中,开始在某些内容上键入斜杠,到第三个斜杠时,它会自动生成最常用的标记供您填写。它看起来有点像 Javadoc 和 JSDoc。

您正在寻找,特别是 this tag .

关于c# - 通知方法调用者该方法抛出的异常类型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16700130/

相关文章:

c# - 无需外部工具即可打印 PDF

c# - 如何向应用程序添加暂停/恢复功能?

java - 处理持久性异常

c# - 属性和命名/可选构造函数参数不起作用

c# - ASP MVC C# : Is it possible to pass dynamic values into an attribute?

c# - 在 Windows Phone 中使用 Background Downloader 进行多次下载

c# - 查找/替换功能 RichTextBox

android - Activity 已泄露 ServiceConnection com.android.org.chromium.com.googlecode.eyesfree.braille.selfbraille.SelfBrailleClient$Connection

java - Apache Ignite 异常 : Caches have distinct sets of data nodes

java - J2EE : Default values for custom tag attributes