等级制度
.NET 框架中的几乎所有异常类都是直接或间接派生自异常类的。从异常类派生的最重要异常类是 −
下表列出了运行时提供的标准异常以及创建派生类时应遵循的条件。
异常类型 |
基本类型 |
描述: |
Exception |
Object |
所有异常的基类。 |
SystemException |
Exception |
所有运行时生成的错误的基类。 |
IndexOutOfRangeException |
SystemException |
仅当数组索引不正确时才由运行时引发。 |
NullReferenceException |
SystemException |
仅当引用 null 对象时才由运行时引发。 |
AccessViolationException |
SystemException |
仅当访问无效内存时才由运行时引发。 |
InvalidOperationException |
SystemException |
在无效状态下由方法引发。 |
ArgumentException |
SystemException |
所有参数异常的基类。 |
ArgumentNullException |
ArgumentException |
由不允许参数为 null 的方法引发。 |
ArgumentOutOfRangeException |
ArgumentException |
由验证参数是否在给定范围内的方法引发。 |
ExternalException |
SystemException |
发生或针对运行时外部环境的异常的基类。 |
SEHException |
ExternalException |
封装 Win32 结构化异常处理信息的异常。 |
例
让我们举一个简单的例子来更好地理解这个概念。首先创建一个名为“WPF异常处理”的新 WPF 项目。
将一个文本框从工具箱拖到设计窗口中。以下 XAML 代码创建一个文本框,并使用某些属性对其进行初始化。
<Window x:Class = "WPFExceptionHandling.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local = "clr-namespace:WPFExceptionHandling"
mc:Ignorable = "d"
Title = "MainWindow" Height = "350" Width = "604">
<Grid>
<TextBox x:Name = "textBox" HorizontalMoognment = "Left"
Height = "241" Margin = "70,39,0,0" TextWrapping = "Wrap"
VerticalMoognment = "Top" Width = "453"/>
</Grid>
</Window>
下面是 C# 中具有异常处理的文件读取。
using System;
using System.IO;
using System.Windows;
namespace WPFExceptionHandling {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
ReadFile(0);
}
void ReadFile(int index) {
string path = @"D:\Test.txt";
StreamReader file = new StreamReader(path);
char[] buffer = new char[80];
try {
file.ReadBlock(buffer, index, buffer.Length);
string str = new string(buffer);
str.Trim();
textBox.Text = str;
}
catch (Exception e) {
MessageBox.Show("Error reading from "+ path + "\nMessage = "+ e.Message);
}
finally {
if (file != null) {
file.Close();
}
}
}
}
}
编译并执行上述代码时,它将生成以下窗口,其中文本框中显示一个文本。
当引发异常或您手动抛出它(如下面的代码所示)时,它将显示一个错误的消息框。
using System;
using System.IO;
using System.Windows;
namespace WPFExceptionHandling {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
ReadFile(0);
}
void ReadFile(int index) {
string path = @"D:\Test.txt";
StreamReader file = new StreamReader(path);
char[] buffer = new char[80];
try {
file.ReadBlock(buffer, index, buffer.Length);
string str = new string(buffer);
throw new Exception();
str.Trim();
textBox.Text = str;
}
catch (Exception e) {
MessageBox.Show("Error reading from "+ path + "\nMessage = "+ e.Message);
}
finally {
if (file != null) {
file.Close();
}
}
}
}
}
当在执行上述代码时引发异常时,它将显示以下消息。
我们建议您执行上述代码并尝试其功能。