轻松学习C#的异常处理

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

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

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

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

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

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

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

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

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的错误。

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

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

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,然后引发这个异常类。

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(); 
  } 
 
 } 
} 

输出的结果为:

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

相关文章

  • C#匹配中文字符串的4种正则表达式分享

    C#匹配中文字符串的4种正则表达式分享

    这篇文章主要介绍了C#匹配中文字符串的4种正则表达式分享,本文介绍了4种形式下的中文字符串匹配正则,需要的朋友可以参考下
    2014-08-08
  • 详解.NET 4.0中的泛型协变(covariant)和反变(contravariant)

    详解.NET 4.0中的泛型协变(covariant)和反变(contravariant)

    这篇文章主要介绍了详解.NET 4.0中的泛型协变(covariant)和反变(contravariant),本文讲解了协变和反变的背景知识、.NET 4.0引入的泛型协变、反变性、协变和反变的相互作用等内容,需要的朋友可以参考下
    2015-06-06
  • C#自定义IP输入框控件

    C#自定义IP输入框控件

    这篇文章主要为大家详细介绍了C#自定义IP输入框控件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 遍历Hashtable 的几种方法

    遍历Hashtable 的几种方法

    遍历Hashtable 的几种方法...
    2007-03-03
  • C#使用二维数组模拟斗地主

    C#使用二维数组模拟斗地主

    这篇文章主要介绍了C#使用二维数组模拟斗地主的方法,通过C#的二维数组简单实现扑克随机发牌的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • C# WinForm制作一个批量转化文件格式的小工具

    C# WinForm制作一个批量转化文件格式的小工具

    在生活中有时候会遇到批量转换格式的需求,一个个点太麻烦了,一个能够实现批量文件格式转换的工具非常有用,所以本文小编使用C# WinForm制作一个批量转化文件格式的小工具,文中有具体实现代码,需要的朋友可以参考下
    2023-11-11
  • c# 播放声音的四种方法

    c# 播放声音的四种方法

    这篇文章主要介绍了c# 播放声音的四种方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-11-11
  • C# Winform多屏幕多显示器编程技巧实例

    C# Winform多屏幕多显示器编程技巧实例

    这篇文章主要介绍了C# Winform多屏幕多显示器编程技巧实例,本文直接给出代码实例,需要的朋友可以参考下
    2015-06-06
  • C#设计模式之Builder生成器模式解决带老婆配置电脑问题实例

    C#设计模式之Builder生成器模式解决带老婆配置电脑问题实例

    这篇文章主要介绍了C#设计模式之Builder生成器模式解决带老婆配置电脑问题,简单介绍了生成器模式的概念、功能并结合具体实例形式分析了C#生成器模式解决配电脑问题的步骤与相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • 基于C#实现屏幕桌面截图

    基于C#实现屏幕桌面截图

    这篇文章主要为大家详细介绍了如何利用C#实现屏幕桌面截图以及左上角区域截图功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-12-12

最新评论