Jor*_*dan 11 c# exception custom-attributes
我不打算实现Java"throws"关键字.有关throws关键字的优点及其未在C#中实现的原因的讨论,请参见http://www.artima.com/intv/handcuffsP.html.
但是,如果有办法创建如下所示的属性,我很好奇:
[ThrowsException( exceptionType = NullReferenceException )]
[ThrowsException( exceptionType = AuthenticationException )]
public void Login( Credentials credz )
{
// ... etc...
}
Run Code Online (Sandbox Code Playgroud)
这样 - 当调用一个用一个或多个ThrowsException属性修饰的方法时,所述方法抛出的异常类型(至少是由ThrowsException属性显式声明的异常)将在方法的文档中可见
这与Java"throws"关键字不同,因为它不需要调用者处理这些异常.这样做可能会引入重大更改,例如,在不处理版本更改引入的新异常的客户端应用程序中.
虽然可以使用:
/// <exception cref="member">description</exception>
Run Code Online (Sandbox Code Playgroud)
我使用属性的意图是,如果异常的名称已更改或异常不再存在,则项目不会编译.因此,如何记录引发异常,不是同一个问题.
更新:2013-05-23
我已经想出了一种通过使用属性而不使用插件来解决问题的方法.我将在本周末尝试解决这个问题,如果能按预期工作,我将很乐意发布解决方案.如果有人打我发布解决方案,我很乐意接受他们的回答.
因为直到星期一我都无法解决这个问题,如果你能打败我,我会提供赏金 - 一个可以接受的答案是:
我认为XML文档不能从ThrowsException属性反映异常,直到项目构建完成之后.
看到一个基于Resharper的解决方案(因为它在我工作的大多数开发工厂中都很常见)会很有趣,但是如果有一个解决方案仍然与第三方工具无关,那么它将不被接受.类似地,只能在Visual Studio中使用的解决方案可以通过依赖于Resharper的解决方案来接受,但如果有一个解决方案可以在其他IDE中工作,例如MonoDevelop(支持更多框架 - 甚至更好),则不会接受它.
Sti*_*ipo 10
我使用属性的意图是,如果异常的名称已更改或异常不再存在,则项目不会编译.因此,如何记录引发异常,不是同一个问题.
您可以在不使用属性的情况下执行此操作,而是编写<exception>文档并像这样配置项目:
Project properties -> 'Build' tab:
'Output' section: Check 'XML documentation file'.
'Treat warnings as erros' section: Check 'Specific warnings' and add warning 1574.
Run Code Online (Sandbox Code Playgroud)
这样,如果cref无法解析XML文档属性值,项目将无法编译.
| 归档时间: |
|
| 查看次数: |
3134 次 |
| 最近记录: |