下列指导方针为 .NET Framework 所提供的一些最常用的异常而描述了最佳的实践。关于 .NET Framework 所提供的完整的异常类列表,请参考:[.NET Framework 类库参考文档]。

Exception 与 SystemException

不要抛出 System.Exception 或者 System.SystemException。
不要在框架的代码中捕获 System.Exception 或者 System.SystemException,除非你打算用来重新抛出异常。
避免捕获 System.Exception 或者 System.SystemException,除非是在顶层的异常处理器中。

ApplicationException

不要抛出或者继承自 System.ApplicationException。

InvalidOperationException

如果在一个不适当的场合中,不要抛出一个 System.InvalidOperationException 异常。如果一个属性设置或者一个方法调用没有适当地提供对象的当前状态,应该抛出 System.InvalidOperationException。例如,对于一个已经作为读取需要而被打开的 System.IO.FileStream 执行写入操作就应该抛出一个 System.InvalidOperationException 异常。

异常同样应该在相关对象集的被组合状态对于操作来说是无效的时候才被抛出。

ArgumentException、ArgumentNullException,以及 ArgumentOutOfRangeException

如果不正确的参量被传递给一个成员,抛出 System.ArgumentException 或者它的一个子类型。如果适用,宁愿是最终被派生的异常类型。

下列代码范例示范了在一个参量是 null 值(在 Visual Basic 中是 Nothing)的时候抛出一个异常。

C#
if (anObject == null)
{throw new ArgumentNullException("anObject", "Specify a non-null argument.");
}
在抛出 System.ArgumentException 或者它的一个派生类型的时候设置 System.ArgumentException.ParamName 属性。这个属性存储了导致异常被抛出的参数名称。注意:这个属性能够通过使用任何一个构造器重载来进行设置。
为属性设置器的隐式 value 参数的名称使用 value。

下列代码范例说明了能够在调用者传递了一个 null 值参量的时候抛出一个异常的属性。

C#
public IPAddress Address
{get{return address;}set{if(value == null){throw new ArgumentNullException("value");}address = value;}
}
不允许公开可调用的 API 来明确地或者隐式地抛出 System.NullReferenceException、System.AccessViolationException、System.InvalidCastException,或者 System.IndexOutOfRangeException。应该实行参量检查来避免抛出这些异常。因为抛出这些异常可以暴露出你的方法中的实现细节,同时这些方法也会随着时间而发生变化。

StackOverflowException

不要明确地抛出 System.StackOverflowException。这个异常应该只能够通过公共语言运行时(CLR)而被抛出。
不要捕获 System.StackOverflowException。

通过编程的方式来处理堆栈的溢出将会是非常困难的。你应该允许通过这个异常来终止进程并且使用调试机制来检查问题的来源。

OutOfMemoryException

不要明确地抛出 System.OutOfMemoryException。这个异常只应该通过 CLR 架构而被抛出。

COMException 与 SEHException

不要明确地抛出 System.Runtime.InteropServices.COMException 或者 System.Runtime.InteropServices.SEHException。这些异常只应该通过 CLR 架构而被抛出。
不要明确地捕获 System.Runtime.InteropServices.SEHException。

ExecutionEngineException

不要明确地抛出 System.ExecutionEngineException。

转载于:https://www.cnblogs.com/Laeb/archive/2007/02/03/639000.html

.NET 指南:捕获并且抛出标准的异常类型相关推荐

  1. java 异常 不抛,java中不捕获或抛出的异常

    java中不捕获或抛出的异常 发布时间:2020-06-25 14:29:16 来源:亿速云 阅读:137 作者:Leah 这期内容当中小编将会给大家带来有关java中不捕获或抛出的异常,文章内容丰富 ...

  2. Spring捕获AOP抛出的异常

    Spring捕获AOP抛出的异常 背景 解决过程 最初方案 失败探索 添加AOP 继承SDK的AOP类 修改AOP生效条件 最终解决方案--BeanPostProcessor 总结 背景 在最近开发中 ...

  3. ORACLE 存储过程异常捕获并抛出

    ORACLE 存储过程异常捕获并抛出 参考文章: (1)ORACLE 存储过程异常捕获并抛出 (2)https://www.cnblogs.com/wdw31210/p/7009731.html 备忘 ...

  4. 【java基础】java异常,捕获与抛出

    java异常,捕获与抛出 1.概念: 在java里,所有的异常都有一个共同的祖先Throwable(可抛出). Throwable:有两个重要的子类:Exception(异常)和Error(错误). ...

  5. oracle异常抛出,ORACLE 存储过程异常捕获并抛出

    for tab_name in tables loop execute immediate 'drop table '||tab_name; --此处可能会报错 end loop; 当前情况是,循环表 ...

  6. C++ throw:抛出自己的异常

    throw 是C++中的关键字,用来抛出异常.如果不使用 throw 关键字,try 就什么也捕获不到:上节提到的 at() 函数在内部也使用了 throw 关键字来抛出异常. throw 既可以用在 ...

  7. java抛出数组格式异常,Java中异常

    一.异常的概述 在Java中,把异常信息封装成了一个类.当出现了问题时,就会创建异常类对象并抛出异常相关的信息(如异常出现的位置.原因等). 二.异常的继承体系和错误的区别 1.异常的继承体系 Thr ...

  8. C++ 抛出和接收异常的顺序

    代码编译运行环境:VS2017+Debug+Win32 异常(exception)是 C++ 引入的错误处理机制.它采用了统一的方式对程序的运行时错误进行处理,具有标准化.安全和高效的特点.C++ 为 ...

  9. java中子类可否抛出两个父类抛出的异常的子类_父类的多个构造方法各自抛出不同的异常,子类的构造方法应该抛出哪个/些异常?...

    [情况描述]如下代码,在父类中定义了两个构造方法,各自throws不同的异常.当定义子类时,IDE会提示需要显示定义构造方法来抛出父类构造方法的异常.很自然地认为应该抛出父类所有构造方法的异常,然而只 ...

最新文章

  1. Android自定义水波纹动画Layout
  2. zepto点击事件兼容pc和mobile
  3. 如何最小化混合云中影子IT带来的风险
  4. C/Cpp / 设计模式 / 观察者模式
  5. 安卓WebView加载网页不显示或者乱跳问题
  6. 也谈ASP.NET页面事件
  7. 雅虎中国,奇虎全面杀入威客领域
  8. Linux Storage I/O Stack v1.0
  9. 记录一次奇葩的sleep(15)引起的Too many connections
  10. EJB系列 - 会话Bean基础知识
  11. 2. Javascript 数据类型
  12. c#Struts框架理念和自制Struts框架下 复杂版(2009-06-10)
  13. 一篇文章让你搞懂如何通过Nginx来解决跨域问题
  14. 清理计算机磁盘碎片,如何清理磁盘碎片
  15. docker docker安装app
  16. OpenCV项目1-OCR识别
  17. TensorFlow Estimator 官方文档之----内置Estimator
  18. 索骥馆-OFFICE系列之《EXCEL数据分析之道:让你的数据更有说服力》扫描版[PDF]
  19. 【Java核心技术大会 PPT分享】林子熠:GraalVM的静态编译和静态分析技术
  20. 上海买房税费要上调? 税务:仅是窗口设置调整

热门文章

  1. BP算法和RNN_模型CNN-RNN-LSTM和GRU简介
  2. 编译运行linux0.12,linux0.12 编译过程
  3. 将下列数组中奇数和偶数分别存放于两个不同的两个数组
  4. java简单密码验证程序
  5. 湖北职称计算机考试报名时间2016,湖北2016年下半年职称计算机考试报名时间延长通知...
  6. linux支持异步io吗,Linux 异步IO
  7. 计算机网络项目化实训教程,计算机网络项目实训教程
  8. php cdr,win10彻底禁止cdr联网
  9. java项目添加jar包
  10. MATLAB教程(1) MATLAB 基础知识(1)