As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center作为指导。
                            
                        
                    
                
                已关闭10年。
            
        

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

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


canthrow语句将在该方法上声明,并列出此方法引发的异常。
canthrow会向调用方法报告或智能感知可能抛出的异常,以及被调用方法可能抛出且不在本地处理的任何异常。
canthrow不是契约性的,因此版本控制不是问题。


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

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

你怎么看?

最佳答案

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

至于编辑器集成,与在Visual Studio本身中寻求支持相比,在Resharper中要求这样的东西可能会更好。

08-06 03:59