C#学习——异常问题

异常问题一般分为:异常捕获、抛出异常、异常处理三步骤;

(1)异常捕获;
通过try{可能有异常的代码块}catch(指定一个实例化的异常基类){捕捉到异常后需要处理的问题}

class Program
    {
        static void Main(string[] args)
        {
            try
            {
                byte mybyte = Convert.ToByte(Console.ReadLine());
                //byte为8位(0-255)若输入数据大于255,则引发异常。
                Console.WriteLine(mybyte);
            }
            catch (ArithmeticException ex)//实例化一个ArithmeticException类,该预定义类的功能是:当算术、强制转换或转换操作发生错误时引发的异常。
            {
                Console.WriteLine(ex.Message.ToString());
            }
           
            Console.ReadKey();
        }
    }

异常捕获
(2)抛出异常
①throw new 异常类(VS自带的基类,文末附有常用基类)

class Program
    {
        private static int ConvertStringToInt(string mystr)
        {
            int outnum = 0;
            try
            {
                outnum = Convert.ToInt32(mystr);
                return outnum;
            }
            catch
            {
                throw new FormatException("格式转换不正确(二胖制作)");
            }
        }
        static void Main(string[] args)
        {
            string mystr = "51";
            try
            {
                int myint;
                myint = Program.ConvertStringToInt(mystr);
                Console.WriteLine(myint);
            }
            catch(FormatException exf)
            {
                Console.WriteLine(exf.Message.ToString());
            }
            Console.ReadKey();

        }
    }

②throw new 异常类(自己预定义的基类)

class MyException:Exception
    {
        public MyException(string message):base(message)
        //欲通过自己预定义类使用message方法,故在派生新的异常类时,需将基类中的message(即base(message))覆盖新定义的message(即string message)。
        {
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("这行代码在引发异常前被执行");
                string mystr = "我是我自己定义的异常";
                throw new MyException(mystr);
            }
            catch (MyException ex)
            {
                Console.WriteLine(ex.Message.ToString());
            }
            Console.ReadKey();
        }
    }

预定义异常类

(3)异常处理
finally{不管try中代码是否引发异常,都将会执行的代码}

class Program
    {
        static void Main(string[] args)
        {
            int[] myint = { 0,2,4,6,8,10,12,14,16,18,20};
            try
            {
                for (int i = 0; i < myint.Length; i++)
                {
                    Console.WriteLine("720÷{0}={1}", myint[i], 720 / myint[i]);//数组成员有0,故会引发除数不能为0的异常。
                }
            }
            catch (SystemException myex)
            {
                Console.WriteLine(myex.Message.ToString());
                Console.WriteLine(myex.InnerException);
            }
            finally
            {
                Console.WriteLine("我什么时候都会执行,无论发生异常与否");
            }
                Console.ReadKey();
        }
    }

异常处理
附:VS常用的异常基类:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值