扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
C# 中的异常处理与 Java 非常相似。
在程序执行的过程中,无论什么时候出现了严重错误,.NET 运行库都会创建一个 Exception 对象来处理该错误。在 .NET 中,Exception 是所有异常类的基类。从 Exception 基类派生了两种类别的异常:System.SystemException 和 System.ApplicationException。System 命名空间中的所有类型都是从 System.SystemException 派生的,而用户定义的异常应该从 System.ApplicationException 派生,以便区分运行库错误和应用程序错误。一些常见的 System 异常包括:
IndexOutOfRangeException — 使用了大于数组或集合大小的索引
NullReferenceException — 在将引用设置为有效的实例之前使用了引用的属性或方法
ArithmeticException — 在操作产生溢出或下溢时引发的异常
FormatException — 参数或操作数的格式不正确
与 Java 中一样,当我们有容易引起异常的代码时,我们应该将此代码放在 try 块中。紧接其后的是一个或多个提供错误处理的 catch 块,并且我们还可以对任何我们想执行但又不知道是否引发异常的代码使用 finally 块。
注意:当使用多个 catch 块时,捕获异常的代码必须以升序的顺序放置,这样就只有第一个与引发的异常相匹配的 catch 块会被执行。C# 编译器会强制这样做,而 Java 编译器不会这样做。
C# 也与 Java 一样,catch 块并不需要参数;在缺少参数的情况下,catch 块适用于任何 Exception 类。
例如,当从文件中进行读取时,可能会遇到 FileNotFoundException 或 IOException,首先,我们需要放置更具体的 FileNotFoundException 处理程序:
try { // Code to open and read a file } catch (FileNotFoundException fe) { // Handle file not found exception first } catch (IOException ioe) { // Now handle any other IO exceptions } catch { // This block will catch all other exceptions } finally { // Executed whether or not an exception occurs, often to release resources }
通过从 Exception 派生,我们可以创建我们自己的异常类。例如,下面的代码创建了一个 InvalidDepartmentException 类,比方说,当某个部门的一个新雇员记录为无效时,我们可能引发该类。用户定义的异常的类构造函数使用 base 关键字来调用基类构造函数,并发送一个适当的消息:
public class InvalidDepartmentException : System.Exception { public InvalidDepartmentException(string Department) : base( "Invalid Department: " + Department){ } }
那么,我们可以用下面的代码引发这种类型的异常:
if (!(Department == "Sales" | Department == "Marketing")) { throw new InvalidDepartmentException(Department); }
注意,C# 不支持 checked 异常。在 Java 中,这些是使用 throws 关键字进行声明的,以便指定一个方法可能引发一个特殊类型的异常,此异常必须由调用代码进行处理。有关 C# 为什么不支持 checked 异常的更多信息,请参见 interview with Anders Hejlsberg。
查看本文来源如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者