C#各种异常处理方式总结

 更新时间:2022年08月27日 11:20:58   作者:Darren Ji  
这篇文章介绍了C#各种异常的处理方式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

.NET的异常处理机制用来发现、处理运行时错误。如果开发人员没有提供异常的处理机制,就默认采用.NET的机制。

通常使用try...catch...finally捕获异常。

try
{
    //有可能发生异常
}
catch(Exception ex)
{
    //处理异常
}
finally
{
    //清理
}
  • 如果没有异常发生,就直接到finally语句块中。
  • finally语句块是必须执行的
  • 这里的catch和finally语句块是可选的。try语句块后面可以跟1个或多个catch语句块,try语句块后面可以直接跟finally语句块。
  • Exception是所有异常的基类

使用.NET默认异常处理机制捕获异常

    class Program
    {
        static void Main(string[] args)
        {
            int a = 0;
            int result = 100/a;
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }

使用try...catch手动捕获异常

    class Program
    {
        static void Main(string[] args)
        {
            int a = 0;
            int result = 0;
            try
            {
                result = 100/a;
                Console.WriteLine("这里不会执行");
            }
            catch (DivideByZeroException exception)
            {
                Console.WriteLine("出现异常");
            }
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }

使用try...catch...finally手动捕获异常

   class Program
    {
        static void Main(string[] args)
        {
            int a = 0;
            int result = 0;
            try
            {
                result = 100/a;
                Console.WriteLine("这里不会执行");
            }
            catch (DivideByZeroException exception)
            {
                Console.WriteLine("出现异常");
            }
            finally
            {
                Console.WriteLine("放行吧,肯定会执行到我这里的~~");
            }
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }

可见,finally语句块中的内容一定会被执行。

使用try...多个catch...finally手动捕获异常

    class Program
    {
        static void Main(string[] args)
        {
            int a = 0;
            int result = 0;
            try
            {
                result = 100/a;
                Console.WriteLine("这里不会执行");
            }
            catch (DivideByZeroException exception)
            {
                Console.WriteLine("不能被0除的异常");
            }
            catch (Exception ex)
            {
                Console.WriteLine("异常");
            }
            finally
            {
                Console.WriteLine("放行吧,肯定会执行到我这里的~~");
            }
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }

可见,只要有一个catch语句块捕获到异常,其它catch语句块不执行。

使用try...catch(不带括号,不带参数)手动捕获异常

    class Program
    {
        static void Main(string[] args)
        {
            int a = 0;
            int result = 0;
            try
            {
                result = 100/a;
                Console.WriteLine("这里不会执行");
            }
            catch
            {
                Console.WriteLine("异常");
            }
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }

通过以上方法,可以捕获任何异常。

try...catch手动捕获抛出的异常

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                throw new DivideByZeroException("除数不能为零");
            }
            catch (DivideByZeroException e)
            {
                Console.WriteLine("异常");
            }
            Console.WriteLine("最后想说的");
            Console.ReadKey();
        }
    }

抛出异常本身并没有显示。

较高层次上下文捕获较低抛出的异常

   class Program
    {
        static void Main(string[] args)
        {
            Calculate c = new Calculate();
            try
            {
                c.Divide();
            }
            catch (Exception e)
            {
                Console.WriteLine("捕获异常");
            }
            Console.WriteLine("最后想说的");
            Console.ReadKey();
        }
    }
    public class Calculate
    {
        public void Divide()
        {
            try
            {
                int a = 0;
                int result = 100/a;
            }
            catch (DivideByZeroException e)
            {
                throw;
            }
        }
    }

在Calculate内部抛出的异常,被更高层次的客户端捕获。

自定义异常

   class Program
    {
        static void Main(string[] args)
        {
            try
            {
                throw new MyException("i am exception");
            }
            catch (Exception e)
            {
                Console.WriteLine("捕获到自定义异常了~~");
            }
            Console.WriteLine("最后想说的");
            Console.ReadKey();
        }
    }
    public class MyException : Exception
    {
        public MyException(string str)
        {
            Console.WriteLine("这是我自定义的异常:" + str);
        }
    }

总结:

  • .NET异常处理并不是标准的try...catch...finally,可以是很灵活的。
  • 尽量在较低层次抛异常,在较高层次捕获异常。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • WPF绑定实例详解

    WPF绑定实例详解

    这篇文章主要介绍了WPF绑定的用法,包括了WPF绑定控件及非控件对象的用法,以及各类参数的详细用法,需要的朋友可以参考下
    2014-09-09
  • C#在验证文件共享模式下实现多线程文件写入

    C#在验证文件共享模式下实现多线程文件写入

    这篇文章主要为大家详细介绍了C#在验证文件共享模式下实现多线程文件写入的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2024-01-01
  • c#使用Dataset读取XML文件动态生成菜单的方法

    c#使用Dataset读取XML文件动态生成菜单的方法

    这篇文章主要介绍了c#使用Dataset读取XML文件动态生成菜单的方法,涉及C#使用Dataset操作XML文件的相关技巧,需要的朋友可以参考下
    2015-05-05
  • C#汉字转拼音实例(支持多音字)

    C#汉字转拼音实例(支持多音字)

    几年前就在网上看到过汉字转拼音的程序,大都就是按汉字的编码转换,单字对应的算法实现的。但是都有一个共同的缺点,不能支持多音字。本篇文章主要介绍了C#汉字转拼音实例(支持多音字),有兴趣的可以了解一下。
    2016-12-12
  • 如何在C#中集成Lua脚本

    如何在C#中集成Lua脚本

    这篇文章主要介绍了如何在C#中集成Lua脚本,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-02-02
  • C#小程序15位转18位身份证号代码

    C#小程序15位转18位身份证号代码

    现在我们使用的都是18位身份证号,而以前都是15位身份证号,而如何将15位身份证号转18位身份证号转换为18位身份证号呢?
    2013-02-02
  • C#中Dictionary类使用实例

    C#中Dictionary类使用实例

    这篇文章主要介绍了C#中Dictionary类使用实例,本文直接给出一个使用实例,包含一些Dictionary的基本用法,需要的朋友可以参考下
    2015-06-06
  • 详谈C++引用&和指针在作为形参时的区别

    详谈C++引用&和指针在作为形参时的区别

    下面小编就为大家带来一篇详谈C++引用&和指针在作为形参时的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 关于C#程序优化的五十种方法

    关于C#程序优化的五十种方法

    这篇文章主要介绍了C#程序优化的五十个需要注意的地方,使用c#开发的朋友可以看下
    2013-09-09
  • C#实现将Excel表格转换为图片(JPG/ PNG)

    C#实现将Excel表格转换为图片(JPG/ PNG)

    Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C#实现将Excel表格转换为图片吧
    2025-04-04

最新评论