加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

C#异常处置

发布时间:2023-06-03 11:14:53 所属栏目:语言 来源:
导读:在 C# 中,异常是在程序运行出错时引发的,例如以一个数字除以零,所有异常都派生自 System.Exception 类。异常处理则是处理运行时错误的过程,使用异常处理可以使程序在发生错误时保持正常运行。C# 中的异常处理基于

在 C# 中,异常是在程序运行出错时引发的,例如以一个数字除以零,所有异常都派生自 System.Exception 类。异常处理则是处理运行时错误的过程,使用异常处理可以使程序在发生错误时保持正常运行。

C# 中的异常处理基于四个关键字构建,分别是 try、catch、finally 和 throw。

try:try 语句块中通常用来存放容易出现异常的代码,其后面紧跟一个或多个 catch 语句块;

catch:catch 语句块用来捕获 try 语句块中的出现的异常;

finally:finally 语句块用于执行特定的语句,不管异常是否被抛出都会执行;

throw:throw 用来抛出一个异常。

try/catch语句

假设一段代码引发了异常,则可以使用 try 和 catch 组合来捕获这个异常,其语法格式如下所示:

try{

  // 引起异常的语句

}catch( ExceptionName e1 ){

  // 错误处理代码

}catch( ExceptionName e2 ){

  // 错误处理代码

}

...

catch( ExceptionName eN ){

  // 错误处理代码

}finally{

  // 要执行的语句

}

如上所示,可以列出多个 catch 语句块来捕获不同类型的异常,以防止 try 语句块在不同的情况下产生多个异常。

【示例】使用 try/catch 语句捕获程序中的异常:

using System;

namespace c.biancheng.net

{

class Demo

{

static void Main(string[] args)

{

try{

int a = 123;

int b = 0;

int x = a / b;

}catch (Exception e) {

Console.WriteLine("捕获到的异常:{0}", e);

}finally{

Console.WriteLine("finally 语句块中的代码");

}

Console.WriteLine("程序中的其它代码");

}

}

}

运行结果如下:

捕获到的异常:System.DivideByZeroException: 尝试除以零。

  在 c.biancheng.net.Demo.Main(String[] args)

finally 语句块中的代码

程序中的其它代码

C#中的异常类

C# 中的异常类主要是从 System.Exception 类派生的,比如 System.ApplicationException 和 System.SystemException 两个异常类就是从 System.Exception 类派生的。

System.ApplicationException 类支持由程序产生的异常,因此我们自定义的异常都应继承此类;

System.SystemException 类是所有系统预定义异常的基类。

除了可以使用系统预定义的异常类外,我们还可以自行定义异常类,自定义的异常类都应继承 System.ApplicationException 类。下面通过示例来演示一下自定义异常类的使用:

using System;

namespace c.biancheng.net

{

class Demo

{

static void Main(string[] args)

{

TestUserDefinedException test = new TestUserDefinedException();

try{

test.validate(12);

}catch(InvalidAgeException e){

Console.WriteLine("InvalidAgeException: {0}", e);

}

Console.WriteLine("其它代码");

}

}

}

public class InvalidAgeException : ApplicationException

{

public InvalidAgeException (string message): base(message)

{

}

}

public class TestUserDefinedException

{

public void validate(int age)

{

if(age < 18)

{

throw (new InvalidAgeException("Sorry, Age must be greater than 18"));

}

}

}

运行结果如下:

InvalidAgeException: InvalidAgeException: Sorry, Age must be greater than 18

  在 TestUserDefinedException.validate(Int32 age)

  在 c.biancheng.net.Demo.Main(String[] args)

其它代码

抛出异常

如果异常是直接或间接派生自 System.Exception 类,则可以在 catch 语句块中使用 throw 语句抛出该异常,所谓抛出异常这里可以理解为重新引发该异常。throw 语句的语法格式如下所示:

catch(Exception e) {

  ...

  Throw e

}

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!