C# 异常处理
C# 中的异常是指程序在运行时遇到意外情况时产生的错误。通常情况下,当程序出现异常时,它将停止运行并抛出异常。为了防止程序崩溃并使程序更加健壮,我们需要使用异常处理技术。
# 异常处理语法
C# 中的异常处理使用 try-catch 块。try 块中包含可能抛出异常的代码,catch 块用于捕获并处理异常。
try
{
// 可能抛出异常的代码
}
catch (ExceptionType1 ex1)
{
// 处理 ExceptionType1 类型的异常
}
catch (ExceptionType2 ex2)
{
// 处理 ExceptionType2 类型的异常
}
finally
{
// 在 try/catch 块之后执行的代码,不管是否出现异常都会执行
}
其中,try 块是必需的,catch 和 finally 块都是可选的。在 try 块中,如果代码抛出异常,程序将立即跳转到最近的 catch 块中。如果 try 块中的代码没有抛出异常,则程序将跳过 catch 块并执行 finally 块中的代码。
# 异常类型
在 C# 中有许多不同的异常类型。每种异常类型都表示不同的错误情况。以下是一些常见的异常类型:
- System.Exception:所有异常的基类。
- System.ArgumentException:表示参数无效。
- System.NullReferenceException:表示尝试访问空对象时出错。
- System.IndexOutOfRangeException:表示索引超出范围。
- System.IO.IOException:表示输入/输出错误。
- System.FormatException:表示格式不正确。
# 示例代码
下面是一个使用 try-catch 块的示例代码:
try
{
int a = 10;
int b = 0;
int c = a / b;
}
catch (DivideByZeroException ex)
{
Console.WriteLine("除数不能为零");
}
finally
{
Console.WriteLine("程序结束");
}
在上面的示例中,我们尝试将 10 除以 0。这将导致 DivideByZeroException 异常。由于我们使用了 try-catch 块,程序将不会崩溃并且会打印出“除数不能为零”的错误信息,然后执行 finally 块中的代码,输出“程序结束”。
# 自定义异常
除了使用内置的异常类型之外,我们还可以定义自己的异常类型。我们可以创建一个继承自 System.Exception 的类,然后使用它来表示我们程序中的特定错误情况。
以下是一个自定义异常类型的示例代码:
public class MyException : Exception
{
public MyException(string message) : base(message)
{
}
}
try
{
throw new MyException("自定义异常");
}
catch (MyException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Console.WriteLine("程序结束");
}
在上面的示例中,我们定义了一个名为 MyException 的自定义异常类型。它继承自 Exception 类,并包含一个构造函数,用于接受异常消息。
然后,在 try 块中,我们使用 throw 语句抛出一个新的 MyException 异常。这将跳转到最近的 catch 块中,我们可以将其捕获并处理。在这里,我们只是简单地输出了异常消息。
最后,我们执行 finally 块中的代码,输出“程序结束”。
# 总结
异常处理是 C# 程序设计中非常重要的一部分。通过使用 try-catch 块,我们可以在程序出现意外情况时捕获并处理异常,使程序更加健壮。同时,我们还可以使用自定义异常类型来表示程序中的特定错误情况。