<From C++ To C#>输入的不是数字怎么办
如果用户输入的不是数字。那么
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");
这样做最主要的还是想把异常进行归类,方便处理。