跳到主要内容

C# 自定义异常

介绍

在 C# 中,异常处理是管理运行时错误的关键机制。虽然 .NET 提供了许多内置异常类型(如 NullReferenceExceptionArgumentException),但在某些情况下,您可能需要创建自定义异常来更准确地表示特定于应用程序的错误。自定义异常允许您封装特定的错误信息,并提供更清晰的错误处理逻辑。

什么是自定义异常?

自定义异常是用户定义的异常类,继承自 System.Exception 或其派生类。通过创建自定义异常,您可以为特定的错误场景定义独特的异常类型,从而使代码更具可读性和可维护性。

创建自定义异常

要创建自定义异常,您需要定义一个继承自 Exception 的类。以下是一个简单的示例:

csharp
using System;

public class InvalidAgeException : Exception
{
public InvalidAgeException() : base("年龄无效") { }

public InvalidAgeException(string message) : base(message) { }

public InvalidAgeException(string message, Exception innerException)
: base(message, innerException) { }
}

在这个示例中,InvalidAgeException 是一个自定义异常类,它继承自 Exception。它有三个构造函数:

  1. 默认构造函数,提供默认的错误消息。
  2. 接受自定义错误消息的构造函数。
  3. 接受自定义错误消息和内部异常的构造函数。

使用自定义异常

创建自定义异常后,您可以在代码中抛出它。以下是一个示例,展示了如何在验证年龄时使用 InvalidAgeException

csharp
public class Person
{
public string Name { get; set; }
public int Age { get; set; }

public void ValidateAge()
{
if (Age < 0 || Age > 120)
{
throw new InvalidAgeException("年龄必须在 0 到 120 之间");
}
}
}

class Program
{
static void Main(string[] args)
{
try
{
Person person = new Person { Name = "John", Age = 150 };
person.ValidateAge();
}
catch (InvalidAgeException ex)
{
Console.WriteLine(ex.Message);
}
}
}

输出:

年龄必须在 0 到 120 之间

在这个示例中,ValidateAge 方法检查 Age 属性是否在有效范围内。如果不在范围内,则抛出 InvalidAgeException

实际应用场景

自定义异常在以下场景中非常有用:

  1. 业务规则验证:例如,验证用户输入是否符合业务规则。
  2. 特定领域错误:例如,在金融应用程序中,处理与交易相关的特定错误。
  3. API 错误处理:在 Web API 中,自定义异常可以用于返回特定的 HTTP 状态码和错误消息。

总结

自定义异常是 C# 中强大的工具,可以帮助您更好地管理和处理特定于应用程序的错误。通过创建自定义异常,您可以使代码更具可读性、可维护性,并提高错误处理的精确性。

附加资源

练习

  1. 创建一个自定义异常 InvalidEmailException,用于验证电子邮件地址的格式。
  2. 编写一个方法 ValidateEmail,如果电子邮件地址无效,则抛出 InvalidEmailException
  3. Main 方法中调用 ValidateEmail,并捕获和处理 InvalidEmailException

通过完成这些练习,您将更好地理解如何在 C# 中使用自定义异常。