C#异常处理知识汇总

 更新时间:2020年6月25日 10:34  点击:2424

概念

  异常处理是指程序在运行过程中,发生错误会导致程序退出,这种错误,就叫做异常

  但并不是所有的错误都是异常

  而处理这种错误,称为异常处理

  异常处理实际是不断去发掘异常、修改异常,使程序更稳定

异常处理主要表现在四个方面:

    程序开发前:尽可能的想到会发生的错误,标注怎么处理应对

    程序开发中:尽量暴露程序的问题,解决这些可能的异常

    系统发布后:尽可能的解决隐藏的或测试人员未测试到的程序问题

    发生异常时:异常代码转化成了友好提示显示给用户

异常分类 

编译错误

  大小写混淆

  数据类型与变量类型不符

  使用未声明的变量

运行错误

  数组下标越界

  除数为零

  其他运行错误

逻辑错误

  超出数据类型的取值范围

  语句体忘记加大括号

  其他逻辑性错误

异常处理操作

C#中异常处理时建立在四个关键词之上:try、catch、finally 和 throw。

  try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块

  catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获

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

  throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成

异常语句格式

try

{

// 引起异常的语句

}

catch( ExceptionName e )

{

// 错误处理代码

}

finally

{

// 要执行的语句

}

示例

using System;
namespace DivisorIsZero
{
 public class DivisorIsZero
 {
 private static void Main()
 {
  int div0 = 20;
  int div1 = 0;
  int div2 = 2;
  int DivValue;

  try
  {
  DivValue = div0 / div1;
  System.Console.WriteLine("div0 / div1 = {0}", DivValue);
  }
  catch(DivideByZeroException e )
  {
  System.Console.WriteLine("零不能作为除数!异常值为:\n{0}",e);
  }

  // catch(DivideByZeroException e)子句只能捕获特定的异常
  // try内的程序代码可能还会产生其它的异常,这些异常只能由catch(Exception e)来捕获了
  catch(Exception e )
  {
  System.Console.WriteLine("并非\''零作为除数引发的异常\"!异常值为:\n{0}",e);
  }
  finally
  {
  System.Console.WriteLine("无论是否发生异常,我都会显示");
  System.Console.ReadKey();
  }
 }
 }
}

结果

C#中常见的异常类

  C# 异常是使用类来表示的

  C# 中的异常类主要是直接或间接地派生于 System.Exception 类System.ApplicationException 和System.SystemException 类是派生于 System.Exception 类的异常类

  System.ApplicationException 类支持由应用程序生成的异常。所以程序员定义的异常都应派生自该类

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

由System.SystemException派生的异常类型:

  System.AccessViolationException 在试图读写受保护内存时引发的异常

  System.ArgumentException 在向方法提供的其中一个参数无效时引发的异常

  System.Collections.Generic.KeyNotFoundException 指定用于访问集合中元素的键与集合中的任何键都不匹配时所引发的异常

  System.IndexOutOfRangeException 访问数组时,因元素索引超出数组边界而引发的异常

  System.InvalidCastException 因无效类型转换或显示转换引发的异常

  System.InvalidOperationException 当方法调用对于对象的当前状态无效时引发的异常

  System.InvalidProgramException 当程序包含无效Microsoft中间语言(MSIL)或元数据时引发的异常,这通常表示生成程序的编译器中有bug

  System.IO.IOException 发生I/O错误时引发的异常

  System.NotImplementedException 在无法实现请求的方法或操作时引发的异常

  System.NullReferenceException 尝试对空对象引用进行操作时引发的异常

  System.OutOfMemoryException 没有足够的内存继续执行程序时引发的异常

  System.StackOverflowException 挂起的方法调用过多而导致执行堆栈溢出时引发的异常

由System.ArgumentException派生的异常类型:

  System.ArgumentNullException 当将空引用传递给不接受它作为有效参数的方法时引发的异常

  System.ArgumentOutOfRangeException 当参数值超出调用的方法所定义的允许取值范围时引发的异常

由System.ArithmeticException派生的异常类型:

  System.DivideByZeroException 试图用零除整数值或十进制数值时引发的异常

  System.NotFiniteNumberException 当浮点值为正无穷大、负无穷大或非数字(NaN)时引发的异常

  System.OverflowException 在选中的上下文中所进行的算数运算、类型转换或转换操作导致溢出时引发的异常

由System.IOException派生的异常类型:

  System.IO.DirectoryNotFoundException 当找不到文件或目录的一部分时所引发的异常

  System.IO.DriveNotFoundException 当尝试访问的驱动器或共享不可用时引发的异常

  System.IO.EndOfStreamException 读操作试图超出流的末尾时引发的异常

  System.IO.FileLoadException 当找到托管程序却不能加载它时引发的异常

  System.IO.FileNotFoundException 试图访问磁盘上不存在的文件失败时引发的异常

  System.IO.PathTooLongException 当路径名或文件名超过系统定义的最大长度时引发的异常

其他常用异常类型:

  ArrayTypeMismatchException 试图在数组中存储错误类型的对象

  BadImageFormatException 图形的格式错误

  DivideByZeroException 除零异常

  DllNotFoundException 找不到引用的dll

  FormatException 参数格式错误

  MethodAccessException 试图访问私有或者受保护的方法

  MissingMemberException 访问一个无效版本的dll

  NotSupportedException 调用的方法在类中没有实现

  PlatformNotSupportedException 平台不支持某个特定属性时抛出该错误

以上就是C#异常处理知识汇总的详细内容,更多关于C#异常处理的资料请关注猪先飞其它相关文章!

[!--infotagslink--]

相关文章

  • 浅谈C# 字段和属性

    这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
  • C#实现简单的登录界面

    我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • C#实现简单的Http请求实例

    这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#中new的几种用法详解

    本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
  • 使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)

    这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • C#和JavaScript实现交互的方法

    最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 轻松学习C#的基础入门

    轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
  • C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • c#自带缓存使用方法 c#移除清理缓存

    这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
  • c#中(&&,||)与(&,|)的区别详解

    这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 经典实例讲解C#递归算法

    这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • C#中list用法实例

    这篇文章主要介绍了C#中list用法,结合实例形式分析了C#中list排序、运算、转换等常见操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c#检测usb设备拨插类库USBClassLibrary分享

    这篇文章主要介绍了c#检测usb设备拨插类库USBClassLibrary的简单示例,需要的朋友可以参考下...2020-06-25