摘要
C# 异常是程序中的运行时错误,它违反了系统约束或应用程序约束,或出现了在正常操作时未预料的情形。例如,程序试图除以0或试图写一个只读文件。当这些发生时,系统捕获这个错误并拋抛出(raise)一个异常。
正文
一个除0的异常
int x = 10;
int y = 0;
float d = x / y;

image.png
语法
- try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。
- catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。
- finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。
- throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。
C# 中的异常类
C# 异常是使用类来表示的。C# 中的异常类主要是直接或间接地派生于 System.Exception 类。System.ApplicationException 和 System.SystemException 类是派生于 System.Exception 类的异常类。
System.ApplicationException 类支持由应用程序生成的异常。所以程序员定义的异常都应派生自该类。
System.SystemException 类是所有预定义的系统异常的基类。
| 异常类 | 描述 |
|---|---|
| System.IO.IOException | 处理 I/O 错误。 |
| System.IndexOutOfRangeException | 处理当方法指向超出范围的数组索引时生成的错误。 |
| System.ArrayTypeMismatchException | 处理当数组类型不匹配时生成的错误。 |
| System.NullReferenceException | 处理当依从一个空对象时生成的错误。 |
| System.DivideByZeroException | 处理当除以零时生成的错误。 |
| System.InvalidCastException | 处理在类型转换期间生成的错误。 |
| System.OutOfMemoryException | 处理空闲内存不足生成的错误。 |
| System.StackOverflowException | 处理栈溢出生成的错误。 |
一个例子

image.png

image.png
int x = 10;
int y = 0;
try
{
float d = x / y;
}
catch (DivideByZeroException ex)
{
MessageBox.Show("出现错误" + ex.Message);
}
finally
{
MessageBox.Show("结束了");
}
用户自定义异常
定义一个类PersonAgeException
internal class PersonAgeException : ApplicationException
{
public PersonAgeException(string message) : base(message)
{
}
}
Person类
public class Person
{
private int _age = 0;
public int Age
{
get
{
return _age;
}
set
{
if (value <= 0)
{
throw (new PersonAgeException("年龄不能小于等于0"));
}
if (value > 150)
{
throw (new PersonAgeException("您的年龄有点异常喔"));
}
}
}
}
调用后出错
Person person=new Person();
person.Age = int.Parse(txtAge.Text);
输入一个大于150的年龄

image.png

image.png
如果你从事上位机、自动化、IT、机器视觉、物联网(IoT)或数字化转型,欢迎加入我的微信圈子!在这里我们可以:
交流最新技术与行业趋势
互相解决技术问题、分享实战经验
结识志同道合的开发者(新手/资深都欢迎)
喜欢把代码写得漂亮、把问题拆得清楚?也欢迎访问我的技术资源网站:
技术老小子(OTTeach) —
http://www.otteach.cn,包含实用教程和项目实战,原代码下载请前往该站。