C# 中的自定义异常类型

本文关键字:类型 自定义异常 | 更新日期: 2023-09-12 17:39:56

C# 包括内置的异常类型,如 NullReferenceExceptionMemoryOverflowException 等。 但是,您通常希望在违反应用程序的业务规则时引发异常。因此,为此,您可以通过派生ApplicationException类来创建自定义异常类。

.Net 框架包括自 .Net v1.0 以来ApplicationException类。它旨在用作自定义异常类的基类。但是,Microsoft现在建议Exception类来创建自定义异常类。 不应在代码中引发ApplicationException异常,也不应捕获ApplicationException异常,除非打算重新引发原始异常。

例如,在学校应用程序中创建 InvalidStudentNameException 类,该类不允许在任何学生的姓名中使用任何特殊字符或数值。

Example: ApplicationException

class Student
{
    public int StudentID { get; set; }
    public string StudentName { get; set; }
}
[Serializable]
class InvalidStudentNameException : Exception
{
    public InvalidStudentNameException() {  }
    public InvalidStudentNameException(string name)
        : base(String.Format("Invalid Student Name: {0}", name))
    {
    }
}

现在,只要名称包含特殊字符或数字,您就可以在程序中引发InvalidStudentNameException。使用 throw 关键字引发异常。

Example: throw custom exception

class Program
{
    static void Main(string[] args)
    {
        Student newStudent = null;
          
        try
        {               
            newStudent = new Student();
            newStudent.StudentName = "James007";
            
            ValidateStudent(newStudent);
        }
        catch(InvalidStudentNameException ex)
        {
            Console.WriteLine(ex.Message );
        }
          
        Console.ReadKey();
    }
    private static void ValidateStudent(Student std)
    {
        Regex regex = new Regex("^[a-zA-Z]+$");
        if (!regex.IsMatch(std.StudentName))
             throw new InvalidStudentNameException(std.StudentName);
            
    }
}

输出:

Invalid Student Name: James000

因此,您可以创建自定义异常类以区别于系统异常。