首页 > 编程语言 >C#自定义异常就这么简单

C#自定义异常就这么简单

时间:2023-05-09 12:55:42浏览次数:35  
标签:CustomException 自定义 C# 创建 catch 异常

C#是一种强类型语言,可以捕获和处理各种异常,从而帮助我们发现程序中出现的错误。在程序开发过程中,如果需要找到特定的错误情况并处理,这时就需要创建自定义异常。本文将介绍如何在C#中创建和使用自定义异常。

1、什么是异常?

异常是指在程序执行期间发生的错误或异常情况,例如除法中除以0、文件不存在、内存不足等。当发生异常时,程序会停止执行当前的操作,并抛出一个异常对象。异常对象包含有关异常情况的信息,例如异常类型、错误消息、堆栈跟踪等。

C# 异常处理基于四个关键字构建:try、catch、finally 和 throw。

1)try- try 块标识为其激活特定异常的代码块。它后面是一个或多个捕获块。

2)catch- 程序在程序中要处理问题的位置使用异常处理程序捕获异常。catch 关键字捕获发生的异常。

3)finally - finally 块用于执行一组给定的语句,无论是否引发异常。例如,如果打开一个文件,无论是否引发异常,都必须关闭该文件。

4)throw- 当出现问题时,程序会引发异常。这是使用 throw 关键字完成的。

2、在C#中自定义异常

接下来我们来看看如何创建C#异常类,在C#中,创建自定义异常很简单。只需要创建一个类,并从System.Exception类或其子类派生即可。例如,以下代码创建了一个名为CustomException的自定义异常类:

//创建一个没有错误消息的异常对象
public class CustomException : Exception
{
    public CustomException() { }
    //创建一个包含错误消息的异常对象。
    public CustomException(string message)
        : base(message){throw new Exception(message);}
    //创建一个包含错误消息和内部异常对象的异常对象。
    public CustomException(string message, Exception innerException)
        : base(message, innerException) { }
}

这样一个自定义异常就创建好了。

使用自定义异常类

使用自定义异常与使用内置异常类相同。只需要在程序中抛出异常对象,并使用try-catch块捕获异常即可。代码如下:

try
{
    //如果是k引发d二异常会报错系统异常
    //int i=0; int j=1;
    //int k=i/j;
    // 某些操作 下面会报自定义异常
    throw new CustomException("发生了自定义异常");
}
catch (CustomException ex)
{
    Console.WriteLine("自定义异常:"+ex.Message);
}
catch (Exception ex)
{
    Console.WriteLine("系统异常:"+ex.Message);
}
 //欢迎关注公众号:DOTNET开发跳槽,领取海量面试题。加微信号xbhpnet入群

上面代码如果是除0问题会报系统异常,而自定义异常在触发的时候报自定义异常。如下:

图片

3、自定义异常的使用场景

以上实现了自定义异常类,那么自定义异常类通常在哪些场景下使用呢?

1)检测业务规则

当我们需要检查业务规则时,可以创建自定义异常类。例如,当用户尝试创建一个已经存在的账户时,我们可以抛出一个名为DuplicateAccountException的自定义异常。

2)易于调试

通过使用自定义异常类,我们可以更好地调试代码。当我们抛出一个自定义异常时,可以将更多有用的信息传递给调用者,例如错误消息、错误代码和堆栈跟踪等。这些信息有助于调用者快速定位问题并进行修复。

结语

自定义异常是处理特定错误情况的好方法。通过创建自定义异常类,我们可以更好地控制程序的行为,并提供有用的错误信息。希望本文对你带来收获,欢迎留言和吐槽。5.1长假结束了,希望大家过完节满血复活,重回人生巅峰!!

参考:微软官方文档

版权声明:本文来源于网友收集或网友供稿,仅供学习交流之用,如果有侵权,请转告小编或者留言,本公众号立即删除。


来源公众号:DotNet开发跳槽

标签:CustomException,自定义,C#,创建,catch,异常
From: https://www.cnblogs.com/xbhp/p/17384550.html

相关文章

  • [SWPUCTF 2021 新生赛]re2
    查个壳:64位,运行:进IDA看看:简单加密函数,不多赘述上脚本就好:intmain(){stringDes="ylqq]aycqyp{";stringflag="";for(inti=0;i<Des.size();i++){for(intj=32;j<127;j++){if((Des[i]<=96||......
  • 聊一聊 dotnet-trace 调查 lock锁竞争
    一:背景1.讲故事最近在分析一个linux上的dump,最后的诱因是大量的lock锁诱发的高频上下文切换,虽然问题告一段落,但我还想知道一点信息,所谓的高频到底有多高频?锁竞争到底是一个怎样的锁竞争?如果了解这些信息对我们后续分析此类问题非常有帮助。要想获取此类信息,看dump肯定是......
  • 解决 VirutalBox 安装 Alpine Linux 出现 Kernel Panic 的问题
    问题如图,使用默认配置安装AlpineLinux时总是会启动都启动不了,找了半天后终于在官方论坛上找到原因了。解决在设置里分配大于1个的cpu就行,如图我这里给的是2个,分配完毕后重新启动就正常了......
  • BNE0x03Simple - 内核提权 searchsploit使用
    主机发现sudonmap-sT--min-rate10000-p-xx.xx.xx.xx-oAnmapscan/ports只有一个端口开放sudonmap-sT-sV-sC-O-pxx.xxx.xx.xx-oAnmapscan/detailsudonmap-sU--top-ports20xx.xx.xx.xx-oAnmapscan/udpsudonmap--script=vuln-pxx.xx.xx.xx-oAnma......
  • [SWPUCTF 2021 新生赛]简简单单的解密
    拿到一个.py的文件,查个壳:进入看看是怎么个解密:挺长,感觉还有点像RC4的加密方式(这个不讨论),往下看逻辑:首根据输出,我们能知道,加密后的文档应该是enc,enc又是由crypt而来,crypt又是由cipher而来,而cipher又是由res而来:看看res怎么来的:res可以知道是由flag跟k异或而来的,接着往下看......
  • Lenovo m93 mini 电脑 Hackintosh 黑苹果efi引导文件
    原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔)硬件型号驱动情况主板Lenovom93mini处理器[email protected](35w)4-core/4-thread已驱动内存8GB(2x4)DDR31600MHz已驱动硬盘2.5"SSDSamsung860EVO500GB已驱动显卡IntelHDGraphics4000已驱动声......
  • You have an error in your SQL syntax; check the manual that corresponds to your
    问题描述显示在条件查询的sql语句那里报错问题解决本来我是习惯了使用servlet写数据库操作的,然后就直接忽略掉了,或者说,直接忘记了在jsp里面的sql语句怎么正确书写了;经过查阅资料发现,查询语句是这样写的:Stringsql="select*frombookwhereid="+id;......
  • Centos7搭建Minio环境(配置开机自启)
    Minio添加环境变量#设置控制台账号最少3位exportMINIO_ACCESS_KEY=admin#设置密码最少8位exportMINIO_SECRET_KEY=12345678为启动程序授权chmod+xminio执行启动./minioserver/mnt/data--console-address":9001"/mnt/data是minio本地存储的路径。在......
  • ssh,socat端口转发
    ssh隧道我们将要研究的第一个协议是SSH,因为它已经内置了通过SSH隧道进行端口转发的功能。虽然SSH曾经是与Linux系统相关联的协议,但现在Windows默认安装了OpenSSH客户端,因此您可以期望在许多系统中找到它,而不受其操作系统的限制。SSH隧道可以以不同的方式用于通过SSH连接转发端口......
  • 【bat】bat如何删除某个目录下文件名包含abc字符串的文件
    【1】需求有10000多个文件,分布在一个大文件夹下的众多子目录,要删除文件名中包含指定字符集的文件。如下图:我要删除test目录下包含所有子文件夹的所有 文件名中带有s1/s2/s3的文件。这个需要匹配的字符串已经写到config.txt文件中【2】bat代码之前想用%er......