C# 中try块可以捕获测试代码块中的错误。catch块可以处理错误。finally块无论是否try和catch块出现异常都可以执行代码。本文主要介绍C# try catch finally异常处理(Exception)。
1、C# Exceptions
执行C# 代码时,可能会发生不同的错误异常:程序员编写的编码错误,由于输入错误引起的错误或其他不可预见的情况。
发生错误时,C# 通常会停止并生成错误消息。 技术术语是:C# 将引发异常(引发错误)。
2、C# try catch
try语句允许定义要执行的错误代码块。
如果在try块中发生错误,则catch语句允许定义要执行的代码块。
try和catch关键字成对出现:
语法
try {
// 要尝试的代码块
}
catch(Exception e) {
// 处理错误的代码块
}
考虑以下示例:
这将产生一个错误,因为myNumbers[10]不存在。输出将是这样的:
using System;
namespace cjavapy
{
public class Trycatch
{
public static void Main(string[] args)
{
int[] myNumbers = { 1, 2, 3 };
Console.WriteLine(myNumbers[8]); // 不存在会报错!
}
}
}
如果发生错误,我们可以使用try catch来捕获错误并执行一些代码来处理该错误:
例如:
using System;
namespace cjavapy
{
public class Trycatch
{
public static void Main(string[] args)
{
try
{
int[] myNumbers = { 1, 2, 3 };
Console.WriteLine(myNumbers[8]);
}
catch (Exception e)
{
Console.WriteLine("输出异常信息等其它操作" + e.Message + e.StackTrace);
}
}
}
}
3、finally
finally语句可以在try catch之后执行代码,而不管是否在try代码中出现异常:
例如:
using System;
namespace cjavapy
{
public class Trycatch
{
public static void Main(string[] args)
{
try
{
int[] myNumbers = { 1, 2, 3 };
Console.WriteLine(myNumbers[8]);
}
catch (Exception e)
{
Console.WriteLine("输出异常信息等其它操作" + e.Message + e.StackTrace);//StackTrace可以查看报错代码行号,排查错误很有用
}
finally {
Console.WriteLine("执行资源释放等相关代码");
}
}
}
}
4、throw关键字
throw语句用于创建抛出自定义错误。
throw语句与异常类型一起使用。 C# 中提供了许多异常类型:
|
异常类 |
描述 |
|
SystemException |
其他用户可处理的异常的基本类 |
|
ArgumentException |
方法的参数是非法的 |
|
ArgumentNullException |
一个空参数传递给方法,该方法不能接受该参数 |
|
ArgumentOutOfRangeException |
参数值超出范围 |
|
ArithmeticException |
出现算术上溢或者下溢 |
|
ArrayTypeMismatchException |
试图在数组中存储错误类型的对象 |
|
BadImageFormatException |
图形的格式错误 |
|
DivideByZeroException |
除零异常 |
|
DllNotFoundException |
找不到引用的DLL |
|
FormatException |
参数格式错误 |
|
IndexOutOfRangeException |
数组索引超出范围 |
|
InvalidCastException |
使用无效的类 |
|
InvalidOperationException |
方法的调用时间错误 |
|
MethodAccessException |
试图访问思友或者受保护的方法 |
|
MissingMemberException |
访问一个无效版本的DLL |
|
NotFiniteNumberException |
对象不是一个有效的成员 |
|
NotSupportedException |
调用的方法在类中没有实现 |
|
NullReferenceException |
试图使用一个未分配的引用 |
|
OutOfMemoryException |
内存空间不够 |
|
PlatformNotSupportedException |
平台不支持某个特定属性时抛出该错误 |
|
StackOverflowException |
堆栈溢出 |
|
SystemException |
运行时产生的所有错误的基类。 |
|
IndexOutOfRangeException |
当一个数组的下标超出范围时运行时引发。 |
|
NullReferenceException |
当一个空对象被引用时运行时引发。 |
|
InvalidOperationException |
当对方法的调用对对象的当前状态无效时,由某些方法引发。 |
|
ArgumentException |
所有参数异常的基类。 |
|
ArgumentNullException |
在参数为空(不允许)的情况下,由方法引发。 |
|
ArgumentOutOfRangeException |
当参数不在一个给定范围之内时,由方法引发。 |
|
InteropException |
目标在或发生在CLR外面环境中的异常的基类。 |
|
ComException |
包含COM类的HRESULT信息的异常。 |
|
SEHException |
封装Win32结构异常处理信息的异常。 |
|
SqlException |
封装了SQL操作异常。 |
例如:
using System;
namespace cjavapy
{
public class DemoThrow
{
static void CheckValue(int x)
{
if (x < 0)
{
throw new ArgumentException("error is x < 0");//指定异常信息
}
else
{
Console.WriteLine("x > 0");
}
}
public static void Main(string[] args)
{ //CheckValue(11);
CheckValue(-1);
}
}
}
本文详细介绍了C#中的异常处理机制,包括try块捕获错误、catch块处理异常、finally块确保资源清理,以及如何使用throw关键字抛出自定义错误和列举了常见的C#异常类型。

5835

被折叠的 条评论
为什么被折叠?



