本来就是练习异常处理的try..catch..finally语句,但当调试器运行到异常时却提示“异常”而中断,下面的语句无法继续执行,那这try..catch..finally还有啥存在的意义。求解如何正常运行该代码?
这是调试器自己提示的异常:(无论是逐句,还是继续执行,都不能进行“throw (new System.Exception());”之后的代码)
这是代码:
using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Text;
namespace ConsoleApplication4 {
class Program { static string[] eTypes = { "none", "simple", "index", "nested index" }; static void Main(string[] args) { foreach (string eType in eTypes) { try { Console.WriteLine("Main() try block reached."); Console.WriteLine("ThrowException(\"{0}\") called.", eType); ThrowException(eType); Console.WriteLine("Main() try block continues."); } catch (System.IndexOutOfRangeException e) { Console.WriteLine("Main() general catch block reached."); } finally { Console.WriteLine("Main() finally block reached."); } Console.WriteLine(); } Console.ReadKey(); }
// 这是后面的代码,由于提问字数限制,所以用图片显示出来,不好意思了
这个程序不是我写的,是从书上摘录的,为的就是学习在程序异常时,try..catch..finally语句的使用及其处理过程。就是用throw故意丢出错误,来看其处理的。
从道理上来说,是可以顺畅的执行,而不应该再报错,但实际运行确报错。所以本人猜想调试器的问题,某些功能要停止掉。
就算程序没有问题,你用throw语句同样会报错
2、调试是会中断,运行时应该不会。
一般想要自己throw的,要么使用自定义异常类型,要么catch写成catch (Exception e),这样才能保证一定能被catch住。
另外,楼上说的“你throw出去的意思本身就是要他停止,不想停止就像你说的用try catch不要throw
”,这句也是不对的,有些情况不是产生了异常,而是因为数据有问题,需要代码走入异常处理,这种时候用throw就是为了走到catch里,没有catch的情况才是向上抛,一直抛到有catch的地方,或者程序直接异常终了。