C#定制异常 自定义异常

 百度搜索C#自定义异常,大多是派生自ApplicationException类的,但是在《C#入门经典》中有说:

在System名称空间中有两个基本的异常类ApplicationException和SystemException,它们派生于Exception。SystemException用作.NET Framework预定义的异常的基类,ApplicationException由开发人员用于派生自己的异常类。但最近的最佳做法是不从这个类中派生异常,而应使用Exception。ApplicationException类在未来可能会被废弃。

同样的,在MSDN的ApplictionException词条中也有说

You should derive custom exceptions from the Exception class rather than the ApplicationException class. You should not throw an ApplicationException exception in your code, and you should not catch an ApplicationException exception unless you intend to re-throw the original exception. 

 当然啦,其实派生自ApplicationException或Exception的写法差别都不是很大,这里只是看大多数人没提到这点稍作补充一下而已。下面附上我自己写的一个demo给没用过自定义异常的人做个参考

using System;

namespace ConsoleApp1
{
    public class MyException : Exception
    {
        public MyException()
            : base("默认错误测试")
        {

        }

        public MyException(string message)//指定错误消息
            : base(message)
        {

        }

        public MyException(string message, Exception inner)//指定错误消息和内部异常信息
            : base(message, inner)
        {

        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                throw new MyException();
            }
            catch (MyException me)
            {
                Console.WriteLine(me.Message);
            }

            for (int i = 0; i < 2; i++)
            {
                Console.WriteLine();

                try
                {
                    Console.WriteLine("请输入1-10之间的整数:");
                    int input = Convert.ToInt32(Console.ReadLine());
                    if (input > 10 || input < 1)
                        throw new MyException(String.Format("你输入的数{0}不是1-10之间", input));
                }
                catch (FormatException fe)
                {
                    //Console.WriteLine(fe.Message); //此处的错误message为 "输入字符串的格式不正确."
                    Console.WriteLine("你输入的不是整数");
                    continue;
                }
                catch (MyException me)
                {
                    Console.WriteLine(me.Message);
                    continue;
                }

                Console.WriteLine("输入成功");
            }

            Console.ReadKey();

        }
    }
}

控制台输入与输出:

这里没有演示指定内部异常信息,有需要的自己研究一下吧

猜你喜欢

转载自blog.csdn.net/qq_19895789/article/details/81390463