轻松学习C#的异常处理

 更新时间:2022年05月06日 14:24:26   投稿:lijiao  
轻松学习C#的异常处理,对C#的异常处理感兴趣的朋友可以参考本篇文章,帮助大家更灵活的运用C#的异常处理

GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!
如果你想靠AI翻身,你先需要一个靠谱的工具!

异常是程序运行中发生的错误,异常处理是程序设计的一部分。错误的出现并不总是编写应用程序者的原因,有时候应用程序会因为终端用户的操作发生错误。无论如何,在编写程序前,都应该预测应用程序和代码中出现的错误。一般良好的编程规范也会避免一些不必要的程序错误的出现。

在项目的开发过程中,并不是所有的代码执行都和想象那样理想,总是避免不了异常的发生。这就需要编程语言的去处理这些异常,C#语言中有三种异常处理语句:

try...catch;//处理异常
try...finally;//清楚异常
try...catch...finally;//处理所有异常

一、用try...catch语句捕获异常

在try语句中包含容易产生异常的代码,接着捕获异常,catch段里的代码会注意进行适当的处理,
格式为:   

try
        {
        }
        catch(异常类  异常对象实例)
        {
        }

例一:用上述的语句捕获访问整型数组nums时产生索引越界异常,并提示给用户:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
  
namespace Text
{
 class Program
 {
  static void Main(string[] args)
  {
   int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
   try//捕获异常
   {
    for (int i = 0; i <= nums.Length; i++)//遍历数组所有元素
    {
     Console.Write(nums[i] + " ");
    }
   }
   catch (Exception a)//访问异常对象
   {
    Console.Write(a.Message);//输出异常错误
   }
    Console.WriteLine();
    Console.ReadLine();
  }
  
 }
}

输出的结果为:

 

由于数据元素的索引是从0开始的,for语句遍历数组元素时,用了“小于或等于”,正好多遍历一次,所以出现索引越界。

二、清除与处理所有异常

如果用户对产生的错误不进行处理,而清除产生的错误分配的资源,那么可以使用try...finally语句来完成,这里的finally块用于清除try块中分配的任何资源以及运行任何即使在发生异常时也必须执行的带代码。格式为:

try
        {
        }
        catch(异常类  异常对象实例)
        {
        }
        finally
        {
        }

这个组合是处理所有异常最好的,它合并前面两种错误处理技术,即捕获错误,清除并继续执行应用程序。

例二:用240去除这个数组中的各元素,由于数组中的元素值有0,所以会产生处数据为0的错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
  
namespace Text
{
 class Program
 {
  static void Main(string[] args)
  {
   int[] nums = { 4,8,12,0,10 };
   try//捕获异常
   {
    for (int i = 0; i < nums.Length; i++)
    {
     int valude = 0;
     valude = 240 / nums[i];
     Console.WriteLine("240/{0}={1}", nums[i], valude);
    }
   }
   catch (Exception a)//访问异常对象
   {
    Console.WriteLine(a.Message);//输出异常错误
   }
   finally
   {
    Console.WriteLine("有没有异常我都会运行");
   }
    Console.WriteLine();
    Console.ReadLine();
  }
  
 }
}

输出的结果为:

三、引发异常

在编写程序时,有时可能要引发异常,以便捕获异常。引发异常是通过throw语句和一个适当的异常类来实现的。其格式为:

throw  new  异常类(异常描述);

异常类可以是C#语言类库中提供的异常类,也可以是自定义异常类。异常描述为可选择项,用来描述产生异常错误,可产生异常时捕获到以便快速找到产生错误的代码。

例三:将字符串转换为整数的异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
  
namespace Text
{
 class Program
 {
  static void Main(string[] args)
  {
   string str = "string";
   try
   {
    int returnInt;
    returnInt = Program.ConvertStringToInt(str);//调用转换
    Console.Write(returnInt);
   }
   catch (FormatException a)
   {
    Console.WriteLine(a.Message);
   }
   Console.ReadLine();
  }
  private static int ConvertStringToInt(string str)//定义转换函数
  {
   int intNum = 0;
   try
   {
    intNum = Convert.ToInt32(str);
    return intNum;
   }
   catch
   {
    throw new FormatException("转换错误");//引发异常
   }
  }
  
 }
}

输出的结果为:

四、自定义异常类

C#语言虽然预定义了许多异常类,但是,在有些场合,创建自己的异常类可能会方便。自定义异常类是通过继承System.Exception类来创建自己的异常类。其步骤是:

(1)声明一个异常,格式如下:class  异常类名:Exception{ }
(2)引发自己的异常,格式如下: throw(ExceptionName);

 例四:定义一个异常类MyException,然后引发这个异常类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
  
namespace Text
{
 class MyException : SystemException { }//声明异常
 class Program
 {
  static void Main(string[] args)
  {
   try
   {
    Console.WriteLine("引发异常前我是被执行的");//引发异常前的提示
    throw new MyException();
    Console.WriteLine("因为已经引发异常,所以我不能被执行");
   }
   catch (MyException)
   {
    Console.WriteLine("引发异常");
   
   Console.ReadLine();
  }
  
 }
}

输出的结果为:

以上就是本文的全部内容,希望对大家的学习有所帮助。

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

相关文章

  • C#根据IP地址查询所属地区实例详解

    C#根据IP地址查询所属地区实例详解

    这篇文章主要介绍了C#根据IP地址查询所属地区实例详解,调用的接口是免费的接口,有需要的同学可以研究下
    2021-03-03
  • 基于C#实现一个最简单的HTTP服务器实例

    基于C#实现一个最简单的HTTP服务器实例

    这篇文章主要介绍了基于C#实现一个最简单的HTTP服务器的方法,详细分析了http服务器的实现原理与相关技巧,以及对应的注意事项,需要的朋友可以参考下
    2014-12-12
  • C#实现简单的聊天窗体

    C#实现简单的聊天窗体

    这篇文章主要为大家详细介绍了C#实现简单的聊天窗体,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C#利用Refit实现JWT自动续期详解

    C#利用Refit实现JWT自动续期详解

    Refit 是一个受到Square的Retrofit库(Java)启发的自动类型安全REST库,这篇文章主要为大家介绍了C#如何利用Refit实现JWT自动续期,感兴趣的可以了解下
    2023-08-08
  • c# list部分操作实现代码

    c# list部分操作实现代码

    这篇文章主要介绍了c# list部分操作,需要的朋友可以参考下
    2013-09-09
  • C# 将 Stream 保存到文件的方法

    C# 将 Stream 保存到文件的方法

    这篇文章主要介绍了C#将 Stream保存到文件的方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • C#操作数据库总结(vs2005+sql2005)

    C#操作数据库总结(vs2005+sql2005)

    C#操作数据库总结,每次做项目都会用到数据库,对数据库的操作都是糊里糊涂从书里找代码用。通过昨天晚上与今天早上的努力,把数据库的操作整理了一下,下面把整理结果做个小结
    2012-09-09
  • C#使用Consul集群进行服务注册与发现

    C#使用Consul集群进行服务注册与发现

    这篇文章主要介绍了C#使用Consul集群进行服务注册与发现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • C#编程之依赖倒置原则DIP

    C#编程之依赖倒置原则DIP

    这篇文章介绍了C#编程之依赖倒置原则DIP,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • C# LINQ查询表达式及对应LAMBDA表达式的用法

    C# LINQ查询表达式及对应LAMBDA表达式的用法

    这篇文章主要介绍了C# LINQ查询表达式及对应LAMBDA表达式的用法,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-04-04

最新评论