<From C++ To C#>输入的不是数字怎么办

如果用户输入的不是数字。那么

int yourNumber = int.Parse(number);

就会抛一个System.FormatException的异常,导致程序意外终止。

跟C++一样,我们可以捕捉住异常进行处理。

            try
            {
                yourNumber = int.Parse(number);
            }
            catch (FormatException e)
            {
                Console.WriteLine("让你猜数字!!");
                return;
            }
C#的异常类都是继承自System.Exception的。如果想大小通吃,我们也可以catch(Exception e)。

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");

这样做最主要的还是想把异常进行归类,方便处理。

posted @ 2010-07-04 22:09  桔红糕  阅读(410)  评论(0编辑  收藏  举报