.NET中异常类(Exception)
异常:程序在运行期间发生的错误。异常对象就是封装这些错误的对象。
try{}catch{}是非常重要的,捕获try程序块中所有发生的异常,如果没有捕获异常的话,程序运行的线程将会挂掉,更严重的是这些错误有可能会直接抛给用户,让用户看到。所以说在程序的最外层必须要有捕获异常的程序。这样至少确保程序的正常运行。还有一点就是,捕获异常之后需要记录下来,这样对于我们排查问题也是有帮助的。
什么情况下,不需要捕获异常呢?
1.发生此类错误的时候,就没必要执行之后的代码的时候,就可以抛出异常了。
2.在开发封装类,并且发生的错误需要让调用者知道的时候,就可以抛出异常了。
Exception类:
翻译自:https://msdn.microsoft.com/en-us/library/804f22sf(v=vs.110).aspx
构造函数:4个重载,Exception()、Exception(SerializationInfo, StreamingContext)、Exception(String)、Exception(String, Exception)。
Exception():创建一个异常的实例,异常实例中所有的字段都需要手动再加,初次创建都是默认值。
Exception(SerializationInfo, StreamingContext):暂时不懂。
Exception(String message):创建一个带有错误信息的异常实例。message表示异常信息。
Exception(String message, Exception ex):创建一个异常实例,并为该异常赋值错误信息,如果有内部异常,也一起传进去。如果没有内部异常就传输null。
属性
| 属性名 | 类型 | 解释 |
| Data | IDictionary | 获取除了异常信息以外,自定义异常的键值对的集合 |
| HelpLink | String | 获取或设置一个跟异常相关联的帮助文档的地址 |
| HResult | int | 获取或设置一个特定异常的代码 |
| InnerException | Exception | 获取当前异常内部的异常实例 |
| Message | String | 获取异常的错误信息 |
| Source | String | 获取或设置当前异常发生在那个应用程序中 |
| StackTrace | String | Gets a string representation of the immediate frames on the call stack. |
| TargetSite | MethodBase | 获取当前异常发生的方法 |
异常类实例方法:
Equals(Object object):确定object是否与当前的对象相等。
ToString():把Exception对象转换成字符串,按照指定的格式显示。对Object.ToString () 方法进行重写。
Finalize():允许用户在垃圾回收机制回收之前,释放资源或者清除操作行为。
GetBaseException():在被继承类重写时,返回一个异常或随后的多个异常。
GetHashCode():作为默认的散列函数。
GetType():返回当前实例运行时的类型。
MemberwiseClone():浅复制当前的对象。
常用的异常类型
| 异常类型 | 描述 |
| ArgumentException | 方法中传进一个非空参数是无效的 |
| ArgumentNullException | 方法中传进一个空参数 |
| ArgumentOutOfRangeException | 传入的参数超出了有效值的范围 |
| DirectoryNotFoundException | 找不到相关目录 |
| DivideByZeroException | 分子或分母为0 |
| DriverNotFoundException | 驱动无效或者找不到相关驱动 |
| FileNotFoundException | 找不到相关文件(文件不存在) |
| FormatException | 格式转换出错,一个类型转换到另外一个类型的时候,格式不一致 |
| IndexOutOfRangeException | 索引超出集合的范围 |
| InvalidOperationException | 当前操作对象的状态是无效的 |
| KeyNotFoundException | 集合中并没有找到对应的键 |
| NotImplementedException | 方法或操作没有被实现 |
| NotSupportedException | 不支持该方法或操作 |
| ObjectDisposedException | 在一个操作上执行一个对象时,发现该对象已经被处理了 |
| OverFlowException | 在算法、内存操作,类型转换的时候发生内存溢出 |
| PathTooLongException | 一个目录或者文件超出了系统定义的最大长度 |
| PlatformNotSupportedException | 当前运行环境不支持该操作 |
| RankException | 方法中传进了错误的数组维数 |
| TimeoutException | 操作超时 |
| UIFormatException | 一个无效的统一资源标识符 |
例子
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions; namespace TestBLL
{
public class ExceptionTest
{
public static void Option(string argument1, int argument2)
{
try
{
if (argument1 == null)
{
throw new ArgumentNullException("参数为空值");
}
string result = argument1;
if (argument2 == )//如果argument2值为101时,抛出参数无效的异常
{
throw new ArgumentException("参数无效");
}
if (argument2 > )
{
throw new ArgumentOutOfRangeException("参数超出了指定的范围");
}
if (!Directory.Exists("D:\\Test"))
{
throw new DirectoryNotFoundException("该目录不存在");
}
if (argument2 == )
{
throw new DivideByZeroException("分母不能为0");
}
int num = / argument2; string path = @"C:\WINDOWS\system32\drivers\UsbCamIF.sys"; //驱动的默认安装地址
if (!File.Exists(path))
{
throw new DriveNotFoundException("未找到相关驱动程序");
}
if (!File.Exists("D:\\Test\\test.txt"))
{
throw new FileNotFoundException("该文件路径不存在");
}
if (Regex.Match(argument1, "\\D").Success)//如果字符中存在非数字字符,在String类型转换成int类型的时候抛出异常
{
throw new FormatException("无法转换类型");
}
num = int.Parse(argument1);
List<string> list = new List<string>() { "", "" };
if (num > list.Count - )
{
throw new IndexOutOfRangeException("索引超出了集合的范围");
}
string indexStr = list[num];
Dictionary<int, string> dic = new Dictionary<int, string>() { { , "" }, { , "" } };
if (!dic.Keys.Contains(num))
{
throw new KeyNotFoundException("并为找到相应的键");
}
result = dic[num];
}
catch (Exception e)
{
e.HelpLink = "https://msdn.microsoft.com/en-us/library/system.exception(v=vs.110).aspx";
e.Source = "Test";
throw new Exception("方法中出现异常",e);//在此处捕获所有的异常,并统一抛出去
}
}
}
}
异常类实例
注意:如果自己能判断的异常或者错误,就不要交由.net的异常处理机制。比如字符串转换成数字,应该在转换之前判断是否符合格式要求,而不是直接转换。
.NET中异常类(Exception)的更多相关文章
- 2019-2-21.NET中异常类(Exception)
.NET中异常类(Exception) 异常:程序在运行期间发生的错误.异常对象就是封装这些错误的对象. try{}catch{}是非常重要的,捕获try程序块中所有发生的异常,如果没有捕获异常的话, ...
- 【转】【C#】异常类 Exception 枚举所有类型的异常
一.基础 在C# 里,异常处理就是C# 为处理错误情况提供的一种机制.它为每种错误情况提供了定制的处理方式,并且把标识错误的代码与处理错误的代码分离开来. 对.NET类来说,一般的 异常类System ...
- C++异常第二篇---C++标准库异常类exception的使用
1 继承图示 2 具体讲解 C++标准库异常类继承层次中的根类为exception,其定义在exception头文件中,它是C++标准库所有函数抛出异常的基类,exception的接口定义如下: na ...
- 借助backtrace和demangle实现异常类Exception
C++的异常类是没有栈痕迹的,如果需要获取栈痕迹,需要使用以下函数: #include <execinfo.h> int backtrace(void **buffer, int size ...
- java中异常(Exception)的定义,意义和用法。举例
1.异常(Exception)的定义,意义和用法 我们先给出一个例子,看看异常有什么用? 例:1.1- public class Test { public static void main(S ...
- java 中异常类
算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeAr ...
- 异常类Exception(String message, Throwable cause)中的cause理解
这个在构造函数里面竟然有一个Throwable,感觉有些奇怪. 1. Throwable cause 这里cause要传一个Throwable的子类异常进去么? 是引起这个异常的异常,如果这个值是空值 ...
- java中Error与Exception有什么区别
Error类和Exception类都继承自Throwable类. Error的继承关系: java.lang.Object java.lang.Throwable java.lang.Er ...
- C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析与解决方法
对于C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析,目前本人分析两种情况,如下: 情况一: 借鉴麒麟.NET ...
随机推荐
- 【TMF eTOM】业务流程框架介绍
TMF文档版权信息 Copyright © TeleManagement Forum 2013. All Rights Reserved. This document and translations ...
- return 、break和continue的区别和作用
1.return关键字并不是专门用于跳出循环的,return的功能是结束一个方法. 一旦在循环体内执行到一个return语句,return语句将会结束该方法,循环自然也随之结束.与continue和b ...
- Ansible Playbooks高级使用
文件操作 文件创建 file 用于设置文件/链接/目录的属性,或者删除文件/链接/目录 ### state如果是directory当目录不存在时会自动创建:如果是file当文件不存在时不会自动创建 - ...
- 关于pacemaker监控mysql修复的方法
对工作中,涉及到数据库修复的一个简单汇总 1.在所有的控制节点上,执行pcs resource命令行,查看控制节点上pacemaker的状态是否异常,如果异常,通过crm_resource -P命令行 ...
- smix到底是个啥?Perl的正则表达式匹配模式
最近在研究一个perl项目,临时学习了一下perl语法,强行看项目源码.因为总是见到各种正则表达式后面接smxi之类,虽然知道是匹配模式,但脑子里毫无概念.所以特地去学习了一下. 以上为背景. Per ...
- MarkDown折叠语法
1.语法代码 程序员的本质 程序的进阶和优化 1.简化人的操作,更少的代码做更多的事情 2.节省时间效率,在更短的时间内做更多的事情 3.占用内存,占更少的内存做更多的事情 <details&g ...
- .gitkeep--git提交空目录的解决方法
前言 git和 svn不同,仅仅跟踪文件的变动,不跟踪目录.所以,一个空目录,如果里面没有文件,即便 git add 这个目录,另外在别处 check out 的时候,是没有这个空目录的. 只跟踪文件 ...
- POJ2758 Checking the Text 哈希
注意到插入次数挺少的,于是每次暴力重构,然后哈希+二分 #include<cstdio> #include<iostream> #include<algorithm> ...
- Duff and Meat(贪心)
Duff is addicted to meat! Malek wants to keep her happy for n days. In order to be happy in i-th day ...
- Java面向对象_常用类库api——二叉树数据结构实现
二叉树是每个节点最多有两个子树的有序树.通常子树被称为"左子树"和"右子树". 二叉树算法的排序规则: 1.选择第一个元素作为根节点 2.之后如果元素大于根节点 ...