美文网首页
C#异常和异常处理

C#异常和异常处理

作者: 86a262e62b0b | 来源:发表于2019-10-15 17:40 被阅读0次

参考文档:
https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/exceptions/

一. 概念

  • 异常是最终全都派生自 System.Exception 的类型, 此类标识异常的类型,并包含详细描述异常的属性。
  • 公共语言运行时 (CLR)、.NET Framework/任何第三方库或应用程序代码都可以生成异常。
  • 在许多情况下,异常并不是由代码直接调用的方法抛出,而是由调用堆栈中再往下的另一方法抛出。 如果出现这种情况,CLR 会展开堆栈,同时针对特定异常类型查找包含 catch 代码块的方法,并执行找到的首个此类 catch 代码块。 如果在调用堆栈中找不到相应的 catch 代码块,将会终止进程并向用户显示消息。

二. 使用

  • 一个不具有 catch finally 块的 try 块会导致编译器错误。

  • 如果引发异常之后没有在调用堆栈上找到兼容的 catch 块,则会出现以下三种情况之一:

    1. 如果异常存在于终结器内,将中止终结器,并调用基类终结器(如果有)。
    2. 如果调用堆栈包含静态构造函数或静态字段初始值设定项,将引发 TypeInitializationException,同时将原始异常分配给新异常的 InnerException 属性。
    3. 如果到达线程的开头,则终止线程。

三. 筛选

  1. 筛选想要处理的异常的一种方式是使用 catch 参数。 也可以使用异常筛选器进一步检查该异常以决定是否要对其进行处理(不修改堆栈)。 如果异常筛选器返回 false,则继续搜索处理程序:
catch (ArgumentException e) when (e.ParamName == "…")
{
}

四. 注意

  • finally块不能写return,不然编译抱报错
  • 如果 try 或 catch 运行到 return语音时,会先运行finally块,然后在返回
  • finally修改部分类型无效

可用于理解的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Project2
{
    class MyExceptionText
    {
        class MyCustomException : Exception
        {
            public MyCustomException(string msg)
            {

            }
        }

        private static void TestThrow()
        {
            MyCustomException ex = new MyCustomException("Custom exception in TestThrow()");
            throw ex;
        }

        static void Main()
        {
            System.Console.WriteLine("num = "+ h1());
            Console.ReadLine();

        }

        static int h1()
        {
            int num = 10;
            try
            {
                TestThrow();
                System.Console.WriteLine("try");
               // return num;
            }
            catch (MyCustomException ex)
            {
                System.Console.WriteLine("MyCustomException");
                
                return num+=20;
            }
            finally
            {
                if(num > 20)
                {
                    System.Console.WriteLine("num>20:"+num);
                }
                System.Console.WriteLine("finally");
                num = 100;//此处无效
            }
            return num;
        }
    }
}

相关文章

  • 11.3c#总结

    自定义异常 主要讲从几个方面学习异常处理,了解什么是异常,以及C#的异常处理机制,了解C#常用的异常类,掌握try...

  • C#异常和异常处理

    参考文档:https://docs.microsoft.com/zh-cn/dotnet/csharp/progr...

  • 11月3日C#学习总结

    今天学习了异常处理机制,主要就是C#常用的异常类、try、catch和finally关键字处理异常和throw关键...

  • 异常处理笔记

    #异常处理 知识点 try—catch C#语言的异常...

  • 自定义异常

    ASP.NET MVC自定义异常处理 C#结构化异常之自定义异常 在C#中所有的异常类型都继承自System.Ex...

  • 异常处理-C#

    ​ 异常处理是指程序在运行过程中,发生错误会导致程序退出,这种错误,就叫做异常。 因此处理这种错误,就称为异常...

  • C#异常处理

    try:一个try块标识了一个将被激活的特定的异常的代码块。后跟一个或多个catch块。 catch:程序通过异常...

  • C#异常处理

    异常是在程序执行期间出现的问题。c#的异常是对程序出现特殊情况的一种响应。 异常提供了一种把程序的控制权从某部分转...

  • 异常和异常处理

    异常 在以前的代码中已经看过异常。通常错误的代码或输入会引发异常。发生异常时,程序立即停止。 下面的代码通过尝试将...

  • springboot 异常捕获和处理

    springboot 异常捕获和处理 异常捕获处理

网友评论

      本文标题:C#异常和异常处理

      本文链接:https://www.haomeiwen.com/subject/advhyctx.html