如果用户输入的不是数字。那么
int yourNumber = int.Parse(number);
就会抛一个System.FormatException的异常,导致程序意外终止。
跟C++一样,我们可以捕捉住异常进行处理。
try{yourNumber = int.Parse(number);}catch (FormatException e){Console.WriteLine("让你猜数字!!");return;}
System.Exception有几个重要的属性,可以帮助了解异常的更多信息。
System.Exception.Message 获取异常的描述字符串
System.Exception.StackTrack 获取异常的栈调用字符串
System.Exception.TargetSite 获取引发异常的方法的信息。
System.Exception.Data 如果你想要在异常中增加额外信息,就需要Data了。
那我们再试一下
try{yourNumber = int.Parse(number);}catch (FormatException e){Console.WriteLine("Message: {0}",e.Message);Console.WriteLine("Stack: {0}", e.StackTrace);Console.WriteLine("target: {0}", e.TargetSite.Name);//TargetSite不是一个字符串,是一个对象实例return;}
C#的异常处理还多了一个finally块。放在catch块后。无论异常是否被触发,finally块中的内容始终都会被执行。
try{yourNumber = int.Parse(number);}catch (FormatException e){Console.WriteLine("Message: {0}", e.Message);Console.WriteLine("Stack: {0}", e.StackTrace);Console.WriteLine("target: {0}", e.TargetSite.Name);//TargetSite不是一个字符串,是一个对象实例return;}finally{Console.WriteLine("finally");}
当然,在实际编程中,我们往往会定义自己的异常类,抛出自定义的异常
throw new MyException("I am an exception");
这样做最主要的还是想把异常进行归类,方便处理。