抛出异常就必须休息吗?我正在用C#编写一个自定义类,如果人们在某些方法中输入错误,我会抛出几个异常。如果抛出异常,抛出后方法中的任何代码是否仍会执行?抛出后我必须休息,还是抛出总是退出方法?当您抛出异常时,下一个要执行的代码是覆盖方法中的throw(如果有)、finally块(如果有)的任何catch块。您可以尝试try-catch、try-catch-finally或try-finally。然后,如果异常未被处理、被catch块重新抛出,或者根本没有被捕获,控制权将返回给调用者。例如,您将从这段代码中得到“Yes1,Yes2,Yes3”...尝试{Console.WriteLine("Yes1");抛出(新异常());Console.WriteLine("No1");}catch{Console.WriteLine("Yes2");扔;Console.WriteLine("No2");}最后{Console.WriteLine("Yes3");}Console.WriteLine("No3");throw将向上移动,从而退出该方法。我建议您使用调试器单步执行该程序,您将亲眼看到发生了什么。学习很有用!我来到这里寻找原始帖子的答案,几乎错过了EricLippert发布的非常有价值的答案。这是他在评论中发布的答案:将其分解为三个问题。(1)throw之后会不会执行方法中的代码?是的。如果异常在try中,匹配的catch块或finally块中的代码将被执行。NO如果没有尝试阻止。控制分支到最近的封闭、catch或(在vb中)exceptionfilter阻塞堆栈的末尾。(2)投掷后需要休息吗?不,永远不要那样做。throw语句的结束点不可访问;throw被编译器认为是一个goto。在throw之后立即发出的语句是不可访问的,永远不会被执行。(3)throw是否总是退出方法?不。如果throw是一个try并且try有一个匹配的catch块,那么catch块可以“吃掉”异常。只有在没有catch块的情况下,异常才会在调用栈中执行非本地操作。如果你对此有更多疑问,我建议你阅读C#规范;所有这些行为都有据可查。最后,听起来你在抛出“愚蠢的”异常,比如“嘿啰嗦的来电者,我告诉过你永远不要给我那些数据”。这很好,因为它可以防止调用者错误。但是如果你这样做了,你应该确保调用者有某种方式知道你的期望!如果调用者无法从您的文档中弄清楚您是否要抛出异常,那么您就没有做出愚蠢的异常,而是做出了一个烦人的异常。有关详细信息,请参阅http://blogs.msdn.com/ericlippert/archive/2008/09/10/vexing-exceptions.aspx。如果您将代码包装在Try...Catch...Finally块中,Finally下的代码将始终执行。例如:尝试'在这里做一些事情'检查用户输入如果用户输入无效抛出新的异常捕获抛出'只是重新抛出相同的异常最后'这段代码将执行,无论是异常与否结束尝试除了你超出了实际的问题:你可能想重新考虑使用异常来向用户提供身份验证信息。就资源而言,引发异常是昂贵且缓慢的。如果您需要应用许多验证规则,请为这些规则编写特定的代码——您应该只依赖异常处理来处理您没有预料到的事情。以上就是C#学习教程:抛出异常后需要休息吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
