我正在写一个自定义中的类C#我投掷几个例外情况,如果人们得到的输入错误的,在一些方法。如果异常,将任何代码的方法之后扔仍然可以执行?我必须要把休后扔掉,或者不会扔总是戒烟的方法?

有帮助吗?

解决方案

当你 一个例外,下一代码,以获得执行任何抓住块,涵盖了就扔在方法(如果有的话)然后, 最后块 (如果有的话)。你可以有一个尝试,试一试-赶上,一试-catch-最后或一个尝试最终.然后,如果是未处理,重新引发一个赶上阻止或不抓住所有、控制返回者。例如,你将获得"Yes1,Yes2,Yes3"从这个代码...

try
{
    Console.WriteLine("Yes1");
    throw (new Exception());
    Console.WriteLine("No1");

}
catch
{
    Console.WriteLine("Yes2");
    throw;
    Console.WriteLine("No2");
}
finally
{
    Console.WriteLine("Yes3");
}

Console.WriteLine("No3");

其他提示

掷将向上移动堆栈,从而离开该方法。

我建议通过你的程序与调试器步进那么你会看到自己是怎么回事。对于学习很有帮助!

我来这里寻找一个答案,原来的职位,几乎错过了张贴埃里克利珀一个非常有价值的答案。下面是他的回答张贴的评论:

此拆分成三个问题。

<强>(1)将任何在throw后的方法的代码的执行吗结果 是。如果异常是一个尝试,然后匹配的catch块或finally块中的代码里面将被执行。如果没有try块则没有。到最近的封闭控制分支最后,捕获或(在vb)例外滤波器方框堆栈。

(2)我必须把断裂后扔?点击 没有,从来没有做到这一点。 throw语句的结束点是不可到达;投掷被视为由编译器goto语句。立即抛出下面的语句是不可达,将不会执行。

<强>(3)是否投掷总是退出方法吗结果 没有。如果扔在尝试和尝试有一个匹配的catch块,然后catch块可以“吃”的例外。只有当不存在catch块不会例外做一个非本地goto语句调用堆栈。

如果您对此有更多的问题,我建议你阅读C#规范;所有这种行为是明确记载。

最后,它听起来像你扔“愚蠢的”例外,如“嘿愚蠢的来电者,我告诉你,永远不会给我的数据”。这是伟大的,因为它可以防止错误的来电。但是,如果你这样做,你应该确保调用者有了解你的期望的一些方法!如果呼叫者无法弄清楚你是否打算抛出或不基于你的文档,那么你还没有做出愚蠢的异常,你做了一个棘手的例外。请参见 http://blogs.msdn.com/ericlippert /archive/2008/09/10/vexing-exceptions.aspx 获得的信息。

如果你用一个try代码... CATCH ... finally块,然后在最后的代码都会被执行。例如:

Try
  ' do some stuff here
  ' Examine user input
  If user input isn't valid
      Throw new exception
Catch
   Throw ' Just re-throws the same exception
Finally
   ' This code will execute, no matter what - exception or not
End Try

顺便到你的实际问题:你可能想用异常来提供验证信息返回给用户重新思考

提高例外是昂贵的资源向和缓慢的。如果你有一些你需要申请然后写这些特定的代码验证规则 - 你应该只依赖于异常处理的事情,你没有预料

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top