C#之异常处理

1Exception

定义一个异常是:0Exception e;.

 Exception 类的构造函数有四种,常用的有三中=种:

 Exception():该构造函数将新的实例的Message属性初始化为系统提供的消息,且所有的Exception类派生的类应提供此默认构造函数。

Exception(string message): 使用指定的错误信息初始化Exception类的实例;

Exception(string message,Exception innerException):使用指定错误信息和对作为异常原因的内部异常的引用来初始化Exception类的新实例。

异常从发生问题的代码区域引发,然后沿堆栈向上传递,直到应用程序处理它或程序终止。

2.异常处理方法

 2.1 抛出异常(throw

   代码中编写抛出异常的语句,其方法是使用关键字throw.抛出异常时程序的现象将会与由于代码出现错误而产生的异常相同。

  代码:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ArrayList

{

    class MyClass

    {

        public MyClass()

        {

            Console.WriteLine("defined one Class");

 

        }

      

        public void Method()

        {

            try

            {

                int[] MyList = { 1, 2, 3, 4, 5 };

                for (int i = 0; i < 5; i++)

                {

                    MyList[i] = MyList[i] * 2;

                }

 

                Console.WriteLine(MyList[5].ToString());

            }

class Program

    {

        static void Main(string[] args)

        {

            MyClass myarr = new MyClass();

            try

            {

                Exception e = new Exception();//创建实例

                throw e;

                //myarr.Method();

            }

关键字throw一行时会出现异常提示,在异常提升窗口中显示了异常的名称。抛出异常时只需创建某一个异常类的实例。

 2.2 捕获异常(Catch)

 在出现异常时一边通过使用throw关键字抛出异常,一边使用try….catch关键字捕获抛出的异常。

代码:

namespace ArrayList

{

    class MyClass

    {

        public MyClass()

        {

            Console.WriteLine("defined one Class");

 

        }

      

        public void Method()

        {

            try

            {

                int[] MyList = { 1, 2, 3, 4, 5 };

                for (int i = 0; i < 5; i++)

                {

                    MyList[i] = MyList[i] * 2;

                }

 

                Console.WriteLine(MyList[5].ToString());

            }

             catch (ArgumentNullException e)

            {

                Console.WriteLine(e.Message);

                throw e;

            }

class Program

    {

        static void Main(string[] args)

        {

            MyClass myarr = new MyClass();

            try

            {

                //Exception e = new Exception();

                //throw e;

                myarr.Method();

            }

            catch (SystemException e)

            {

                Console.WriteLine("出现其他异常");

            }

            Console.ReadKey();

        }

    }

}

此程序中由于错误的使用了数组下标,导致运行程序时出现异常提示。利用了try..catch 关键字来捕获异常。

2.3 异常的最终处理(finally)

 Finally代码块用于清除try代码块中分配的任何资源,以及运行任何即时在发生异常时也必须执行的代码。我们知道catch用于处理语句块中出现的异常,而finally代码块用于保证代码语句的执行的。控制总是传递给finally块,与try块的退出方式无关,也就是说finally块既可以和try关键字单独配对使用,也可以与try…catch语句共同使用。

代码:

namespace @finally

{

    class MyClass

    {

        public MyClass()

        {

            Console.WriteLine("text Programm");

        }

        public void Method()

        {

            try

            {

                IndexOutOfRangeException e = new IndexOutOfRangeException();

                throw e;

            }

            catch(IndexOutOfRangeException ex)

            {

                Console.WriteLine("Find IndexOutOfRangeException 异常"

                    +"请检查代码,确认有无数组索引超出范围的情况");

                Console.WriteLine(ex.Data.ToString());

                Console.WriteLine(ex.HelpLink);

                Console.WriteLine(ex.InnerException==null?"":ex.InnerException.ToString());

                Console.WriteLine(ex.Message);

                Console.WriteLine(ex.Source);

                Console.WriteLine(ex.StackTrace);

                Console.WriteLine(ex.TargetSite.ToString());

            }

            finally

            {

                Console.WriteLine("程序运行完成");

            }

        }

    }

    class Program

    {

        static void Main(string[] args)

        {

            MyClass myclass = new MyClass();

            myclass.Method();

            Console.ReadKey();

        }

    }

}

3.异常处理的属性

3.1TargetSit属性

此属性是用于获取引发当前异常的方法,包括了查看发生异常的方法所在的类,其成员属性等会一系列信息。

3.2StackTrace属性

 该属性包含可用于错误发生位置的堆栈跟踪,如果有可用的调试信息,则堆栈跟踪包含源文件名和程序行号,

3.3: HelpLink属性

  该属性可用于保存某个帮助文件的URLURN,该帮助文件通常会提供有关异常起因的大量信息。

3.4Data属性

 该属性可以以键值对的形式保存任意的数据,其类型为IDictionary。在发生异常时候将很多的信息都保存在Data中。方便后续处理,一般都是将异常发生的时间储存在Data属性中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值