我们可以在C#中获得canthrow语句吗? - c#

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中要求这样的东西可能会更好。

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…