C#异常和异常处理

这篇具有很好参考价值的文章主要介绍了C#异常和异常处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C# 语言的异常处理功能有助于处理在程序运行期间发生的任何意外或异常情况。 异常处理功能使用 trycatch 和 finally 关键字来尝试执行可能失败的操作、在你确定合理的情况下处理故障,以及在事后清除资源。 公共语言运行时 (CLR)、.NET/第三方库或应用程序代码都可生成异常。 异常是使用 throw 关键字创建而成。

 

public class MyException

    {

        public static double divs(double a,double b)

        {

            if (b==0)

            {

                //抛出除数为0的异常

                throw new DivideByZeroException();

            }



            return a / b;

        }

}



 static void Main(string[] args)

        {



            //捕获异常: 若不捕获异常,程序将直接崩溃

            try

            {

                double result=MyException.divs(6, 0);

                Console.WriteLine(result);

            }

            catch (DivideByZeroException)

            {

                Console.WriteLine("除数不能为0");

            }



            Console.ReadLine();

        }

异常概述

异常具有以下属性:

  • 异常是最终全都派生自 System.Exception 的类型。
  • 在可能抛出异常的语句周围使用 try 代码块。
  • 在 try 代码块中出现异常后,控制流会跳转到调用堆栈中任意位置上的首个相关异常处理程序。 在 C# 中,catch 关键字用于定义异常处理程序。
  • 如果给定的异常没有对应的异常处理程序,那么程序会停止执行,并显示错误消息。
  • 除非可以处理异常并让应用程序一直处于已知状态,否则不捕获异常。 如果捕获 System.Exception,使用 catch 代码块末尾的 throw 关键字重新抛出异常。
  • 如果 catch 代码块定义异常变量,可以用它来详细了解所发生的异常类型。
  • 使用 throw 关键字,程序可以显式生成异常。
  • 异常对象包含错误详细信息,如调用堆栈的状态和错误的文本说明。
  • 即使引发异常,finally 代码块中的代码仍会执行。 使用 finally 代码块可释放资源。例如,关闭在 try 代码块中打开的任何流或文件。
  • .NET 中的托管异常在 Win32 结构化异常处理机制的基础之上实现。

//捕获系统提供的异常

 public class MyException

    {

        public static double divs(double a,double b)

        {

            if (b==0)

            {

                //抛出除数为0的异常

                throw new DivideByZeroException();

            }



            return a / b;

        }

}







 //自定义异常

    class CustomException:Exception

    {

        public CustomException(string mes) { }

    }



    

    public class ExceptionTest

    {

        public void etest()

        {

            //抛出自定义的异常

            throw new CustomException("这是一个自定义的错误!");

        }

    }







        static void Main(string[] args)

        {



            //捕获异常: 若不捕获异常,程序将直接崩溃

            try

            {

                //里面包含系统异常

                double result=MyException.divs(6, 0);

                Console.WriteLine(result);



                //里面包含自定义异常

                ExceptionTest et = new ExceptionTest();

                et.etest();



            }

            //捕获系统已有异常

            catch (DivideByZeroException)

            {

                Console.WriteLine("除数不能为0");

            }

            //捕获自定义异常

            catch (CustomException ct)

            {

                Console.WriteLine(ct.Message); //打印异常信息

            }

            //finally 块可用于发布资源(如文件流、数据库连接和图形句柄)而无需等待运行时中的垃圾回收器来完成对象。

            finally

            {

                Console.WriteLine("最终执行,一般用于回收或释放资源!");

            }







            Console.ReadLine();

        }

编译器生成的异常

当基本操作失败时,.NET 运行时会自动引发一些异常。 这些异常及其错误条件在下表中列出。

例外

描述

ArithmeticException

算术运算期间出现的异常的基类,例如 DivideByZeroException 和 OverflowException。

ArrayTypeMismatchException

由于元素的实际类型与数组的实际类型不兼容而导致数组无法存储给定元素时引发。

DivideByZeroException

尝试将整数值除以零时引发。

IndexOutOfRangeException

索引小于零或超出数组边界时,尝试对数组编制索引时引发。

InvalidCastException

从基类型显式转换为接口或派生类型在运行时失败时引发。

NullReferenceException

尝试引用值为 null 的对象时引发。

OutOfMemoryException

尝试使用新运算符分配内存失败时引发。 此异常表示可用于公共语言运行时的内存已用尽。

OverflowException

checked 上下文中的算术运算溢出时引发。

StackOverflowException

执行堆栈由于有过多挂起的方法调用而用尽时引发;通常表示非常深的递归或无限递归。

TypeInitializationException

静态构造函数引发异常并且没有兼容的 catch 子句来捕获异常时引发。文章来源地址https://www.toymoban.com/news/detail-516234.html

到了这里,关于C#异常和异常处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • unity的C#学习——预处理指令、异常处理和文件的输入输出

    C# 中的预处理器指令是用来 指示编译器在 编译代码之前 执行一些预处理操作 的特殊指令。预处理器指令以 井号 # 开始,并且必须出现在代码的最外层,不能包含在方法或类的内部。 #define 指令用于定义一个符号常量。符号常量可以在代码中使用 #if 或 #elif 指令进行条件编

    2024年03月22日
    浏览(41)
  • 配置legacyUnhandledExceptionPolicy属性防止处理异常后程序崩溃退出(C#)

    这是这篇文章后面遗留的问题: winform中的全局异常信息_winform全局异常捕获_zxy2847225301的博客-CSDN博客 就是线程抛出异常后,被AppDomain.CurrentDomain.UnhandledException注册的事件捕获后,程序依旧崩溃退出。 解决方案:在app.config配置文件中的runtime节点中加上legacyUnhandledExceptionPol

    2024年02月09日
    浏览(41)
  • Go语言入门10(异常处理)

    ​如果出现了panic异常,那么会停止当前函数的运行,然后会找recover()方法,如果没有的话,就会报错退出程序,如果有就会执行recover的方法体中的方法 ​我们可以使用defer延迟处理函数来捕获panic异常,用recover()来从错误场景中恢复,必须的在defer修饰的方法中使用,不然不

    2023年04月23日
    浏览(41)
  • Java语言----异常处理(看了必会)

    目录 一.异常的概述 二.异常类的层次结构和种类 二.异常的基本用法 2.1异常的捕捉 2.2异常处理代码实现 三.抛出异常 3.1 throw 3.2 throws 四.finally的进一步详解 五.自定义异常类 总结 😽个人主页:tq02的博客_CSDN博客-C语言,Java领域博主  🌈理想目标:努力学习,向Java进发,拼搏

    2023年04月11日
    浏览(59)
  • 阿里Java开发手册~异常处理

    1. 【强制】 Java 类库中定义的一类 RuntimeException 可以通过预先检查进行规避,而不应该 通过 catch 来处理,比如: IndexOutOfBoundsException , NullPointerException 等等。 说明: 无法通过预检查的异常除外,如在解析一个外部传来的字符串形式数字时,通过 catch NumberFormatException 来实现

    2024年02月15日
    浏览(37)
  • 后端项目开发:整合全局异常处理

    新建exception目录,用来进行自定义的全局异常处理。 (1)新建自定义的GlobalException基 类继承RuntimeException类,我们自定义的异常类全部需要继承GlobalException基类进行处理。 这里我们直接利用之前定义的错误码接口类。 (2)在exception目录下,新建GlobalExceptionHandler类,拦截异

    2024年02月11日
    浏览(40)
  • 在C#语言里对NULL的技术处理

    在 C# 中,null 是一个特殊存在,表示缺少值。Null 可以分配给引用类型和可为 null 的值类型,但不能分配给不可为空的值类型。在 C# 中处理 null 值是编写可靠且可靠的代码的一个重要方面。在本文中,我将讨论一些在 C# 中处理 null 值的最常用技术。 null合并操作符(??)是一个简

    2024年02月08日
    浏览(34)
  • Autocad C#二次开发煤矿数据处理

    2024年02月10日
    浏览(48)
  • C#开发的OpenRA游戏的游戏界面内鼠标处理窗口

    C#开发的OpenRA游戏的游戏界面内鼠标处理窗口 OpenRA游戏里,游戏上面所有物品显示,都是基于窗口容器。 前面也讨论过,其实就是基于ingame.yaml文件来布局和创建的, 在ingame.yaml文件里,根窗口Container@INGAME_ROOT,共有六个子节点: Children:     LogicKeyListener@GLOBAL_KEYHANDLER:   

    2024年02月11日
    浏览(44)
  • 0基础开发EtherNet/IP:协议格式,JAVA、C#、C++处理

    经过一阵倒腾,把CIP、Ethernet/ip协议搞到手 协议的概念和理论就不提及了,上网随便一搜索EtherNet/IP遍地都是。 直接将协议关键点列举出来吧。 更多协议资料 www.jngbus.com 通讯软件群 30806722 这里讲解的是TCP和UDP协议的格式,EtherNet/IP数据所处位置。 ① 具体内容需要大家自己进

    2024年01月21日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包