溺水动物的C#学习笔记:异常处理

  • 时间:2025-11-11 18:02 作者: 来源: 阅读:0
  • 扫一扫,手机访问
摘要:溺水动物的C#学习笔记:异常处理 我尝试将所有c#的内容写在一篇博文里, 但发现可读性和可维护性都变得很差. 所以我还是决定一章一章记笔记了. 之前的那一篇有时间的时候我会把它拆开. 笔者有C语言基础, 部分C语言的知识会予以略过. 笔者也是完全的新手小白, 如有错漏请指正. c#异常处理 一般来说, 你的程序会在出错时隐式地生成异常. 但是如果想要显式地抛出异常, 可以使用throw语句.

溺水动物的C#学习笔记:异常处理

  • 我尝试将所有c#的内容写在一篇博文里, 但发现可读性和可维护性都变得很差. 所以我还是决定一章一章记笔记了. 之前的那一篇有时间的时候我会把它拆开.
  • 笔者有C语言基础, 部分C语言的知识会予以略过.
  • 笔者也是完全的新手小白, 如有错漏请指正.

c#异常处理

一般来说, 你的程序会在出错时隐式地生成异常. 但是如果想要显式地抛出异常, 可以使用throw语句.

如果您没有捕获您程序产生的异常, 这个异常将会由通用异常处理程序处理. 该程序会产生一个对话窗口. (如图所示).

溺水动物的C#学习笔记:异常处理

可以使用try 对可能出现问题的代码进行分区, 使用catch对可能出现问题的代码进行处理. 使用finally来写那些无论是否发生了异常都会继续运行的代码.

try需要一个或多个关联的catch块(每种catch块处理一个异常), 或是一个finally块, 或是两者兼有.

在多个关联的catch块中, 计算顺序为从上到下. 但是针对每个引发的异常, 仅执行一个catch块. 也就是说, 每个引发的异常将执行遇到的第一个符合所引发异常的确切类型或者基类的catch, 这提示我们将最具体的异常写在最上方.

编译器生成的异常往往派生自SystemException类. 具体的异常名称可以参阅这里.

以下是一个异常处理的语法格式示例:

try
{
    // Code to try goes here.
}
catch (SomeSpecificException ex)
{
    // Code to handle the exception goes here.
}
finally
{
    // Code to execute after the try (and possibly catch) blocks
    // goes here.
}

可以添加when关键字作为异常筛选器.

when可以在上下文中指定筛选条件. 可在catch子句中使用when关键字来指定一个条件,此条件必须为 true,才能执行特定异常的处理程序。 语法为:

catch (ExceptionType [e]) when (expr)

下面是一个具体的例子:

using System;
class GetIndex {
    static public int GetArrayElem(int[] arr,int index) {
        try {
            return arr[index];
        }
        catch (IndexOutOfRangeException e) when (index < 0){
            //throw new ArgumentOutOfRangeException("Parameter index cannot be negative.", e);
            Console.WriteLine("Parameter index cannot be negative.");
            return -1;
        }
        catch (IndexOutOfRangeException e) {
            //throw new ArgumentOutOfRangeException("Parameter index cannot be greater than the array size.", e);
            Console.WriteLine("Parameter index cannot be greater than the array size.");
            return -1;
        }
    }
}
class Application {
    public static void Main(string[] args) {
        int[] arr;
        arr = new int[10];
        GetIndex.GetArrayElem(arr, -1);
        GetIndex.GetArrayElem(arr, 10);
    }
}

  • 发现了每个catch块里是要有返回语句的, 不然会报错.
  • 若对象是直接或者间接地派生自System.Exception类, 即可以使用throw来抛出异常.

创建用户自定义异常

由于c#是个面向对象的语言, 所以异常自然也是一个对象啦~具体来说, 异常都是一个个类. 系统生成的异常派生自类System.Exception, 而用户定义异常时, 可以派生自System.ApplicationException类.

该类有ApplicationException(String)这样的构造函数, 您可以使用它来指定异常的文本.

以下是一个例子:

using System;

public class ElemNotFound : ApplicationException {
    public ElemNotFound(string str):base(str) {

    }
}
class Application {
    public static void Main(string[] args) {
        ElemNotFound e = new ElemNotFound("Can not found element");
        throw e;
    }
}

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】最低 2 美元,这 55 款 macOS & Windows 应用一次全都入手(2025-11-11 22:01)
【系统环境|】SCI期刊对论文图片有哪些要求?(2025-11-11 22:00)
【系统环境|】论文缩写大全,拿走不谢(2025-11-11 22:00)
【系统环境|】阿甘正传高频词整理 GRE托福四六级词汇整理(2025-11-11 21:59)
【系统环境|】矢量图形编辑应用程序-WinFIG(2025-11-11 21:59)
【系统环境|】Figma上市首日暴涨250%的深层逻辑:为什么AI时代协作平台更加不可替代?(2025-11-11 21:58)
【系统环境|】FigJam是什么?一文读懂在线白板软件的方方面面!(2025-11-11 21:58)
【系统环境|】在windows上有什么好用的书写白板软件?(2025-11-11 21:57)
【系统环境|】Docker基础应用之nginx(2025-11-11 21:57)
【系统环境|】VS Code 新手必装插件清单(2025-11-11 21:56)
手机二维码手机访问领取大礼包
返回顶部