zhcn 编程语言 Golang Go 文件处理 非公開: C#异常处理

C#异常处理

在 C# 中,当程序运行不正确时会发生异常,例如数字除以零。所有异常均派生自 System.Exception 类。异常处理是处理运行时错误的过程,它允许程序即使发生错误也能继续成功运行。

C# 中的异常处理围绕四个关键字构建:try、catch、finally 和 throw。

  • try:try 语句块通常用于包含容易出现异常的代码,后跟一个或多个 catch 语句块。
  • catch:catch 语句块用于捕获 try 语句块中引发的异常。
  • finally:finally 语句块用于执行特定的语句,无论是否抛出异常。
  • throw: throw 用于抛出异常。

try/catch 语句

假设代码的某些部分抛出异常,您可以使用 try 和 catch 的组合来捕获异常。其语法为:

try{
}catch( ExceptionName e1 ){
}catch( ExceptionName e2 ){
}

catch( ExceptionName eN ){
}finally{
   // 
}

如上所示,您可以列出多个catch语句块来捕获不同类型的异常,并防止try语句块在不同情况下产生多个异常。

[示例] 使用 try/catch 语句捕获程序中的异常。

 using System;

namespace it-kiso.com
{
    class Demo
    {
        static void Main(string[] args) 
        {
            try{ 
                int a = 123; 
                int b = 0; 
                int x = a / b; 
            }catch (Exception e) {
                Console.WriteLine("捕捉到的例外:{0}", e);
            }finally{
                Console.WriteLine("finally语句块中的代码"); 
            }
            Console.WriteLine("程序中的其它代码"); 
        }
    }
} 

C# 异常类

C# 中的异常类主要派生自 System.Exception 类。例如,两个异常类 System.ApplicationException 和 System.SystemException 都派生自 System.Exception 类。

  • 自定义异常必须从 System.ApplicationException 类继承,因为它支持以编程方式生成的异常。
  • System.SystemException 类是所有系统预定义异常的基类。

下表列出了从 Sytem.SystemException 类派生的一些预定义异常类。

异常类解释
系统.IO.IOException处理 I/O 错误
系统索引超出范围异常处理方法引用超出范围的数组索引时生成的错误。
System.ArrayTypeMismatchException处理数组类型不匹配时的错误
系统.NullReferenceException处理引用空对象时的错误。
系统.DivideByZeroException除以零时处理错误
System.InvalidCastException处理类型转换期间产生的错误
系统内存不足异常处理由于可用内存不足而导致的错误
系统堆栈溢出异常处理堆栈溢出错误

自定义异常类

除了使用系统预定义的异常类之外,您还可以定义自己的异常类。自定义异常类必须继承自 System.ApplicationException 类。以下示例演示了自定义异常类的使用。

 using System;

namespace it-kiso.com
{
    class Demo
    {
        static void Main(string[] args) 
        {
            TestUserDefinedException test = new TestUserDefinedException();
            try{
                test.validate(12);
            }catch(InvalidAgeException e){
                Console.WriteLine("InvalidAgeException: {0}", e);
            }
            Console.WriteLine("その他のコード");
        }
    }
}
public class InvalidAgeException : ApplicationException
{
   public InvalidAgeException (string message): base(message)
   {
   }
}
public class TestUserDefinedException
{
   public void validate(int age)
   {
      if(age < 18)
      {
         throw (new InvalidAgeException("申し訳ありませんが、年齢は18歳以上でなければなりません"));
      }
   }
} 

操作的结果将是:

InvalidAgeException: InvalidAgeException: 申し訳ありませんが、年齢は18歳以上でなければなりません
   TestUserDefinedException.validate(Int32 age)
   it-kiso.com.Demo.Main(String[] args)

抛出异常

如果异常直接或间接派生自 System.Exception 类,则可以在 catch 语句块中使用 throw 语句来引发异常。这里所谓的抛出异常可以理解为重新抛出异常。 throw语句的语法是:

catch(Exception e) {
   …
   Throw e
}

通俗易懂的《C#异常处理》讲解!您必须观看的 2 个最佳视频

例外処理 | C# |チュートリアル
https://www.youtube.com/watch?v=ZJRg8nrNeeA
在 C# 中,当程序运行不正确时会发生异常,例如数字除以零。所有异常均派生自 System.Exception 类。异常处理是处理运行时错误的过程,它允许程序即使发生错误也能继续成功运行。

C# 中的异常处理围绕四个关键字构建:try、catch、finally 和 throw。

  • try:try 语句块通常用于包含容易出现异常的代码,后跟一个或多个 catch 语句块。
  • catch:catch 语句块用于捕获 try 语句块中引发的异常。
  • finally:finally 语句块用于执行特定的语句,无论是否抛出异常。
  • throw: throw 用于抛出异常。

try/catch 语句

假设代码的某些部分抛出异常,您可以使用 try 和 catch 的组合来捕获异常。其语法为:

try{
}catch( ExceptionName e1 ){
}catch( ExceptionName e2 ){
}

catch( ExceptionName eN ){
}finally{
   // 
}

如上所示,您可以列出多个catch语句块来捕获不同类型的异常,并防止try语句块在不同情况下产生多个异常。

[示例] 使用 try/catch 语句捕获程序中的异常。

 using System;

namespace it-kiso.com
{
    class Demo
    {
        static void Main(string[] args) 
        {
            try{ 
                int a = 123; 
                int b = 0; 
                int x = a / b; 
            }catch (Exception e) {
                Console.WriteLine("捕捉到的例外:{0}", e);
            }finally{
                Console.WriteLine("finally语句块中的代码"); 
            }
            Console.WriteLine("程序中的其它代码"); 
        }
    }
} 

C# 异常类

C# 中的异常类主要派生自 System.Exception 类。例如,两个异常类 System.ApplicationException 和 System.SystemException 都派生自 System.Exception 类。

  • 自定义异常必须从 System.ApplicationException 类继承,因为它支持以编程方式生成的异常。
  • System.SystemException 类是所有系统预定义异常的基类。

下表列出了从 Sytem.SystemException 类派生的一些预定义异常类。

异常类解释
系统.IO.IOException处理 I/O 错误
系统索引超出范围异常处理方法引用超出范围的数组索引时生成的错误。
System.ArrayTypeMismatchException处理数组类型不匹配时的错误
系统.NullReferenceException处理引用空对象时的错误。
系统.DivideByZeroException除以零时处理错误
System.InvalidCastException处理类型转换期间产生的错误
系统内存不足异常处理由于可用内存不足而导致的错误
系统堆栈溢出异常处理堆栈溢出错误

自定义异常类

除了使用系统预定义的异常类之外,您还可以定义自己的异常类。自定义异常类必须继承自 System.ApplicationException 类。以下示例演示了自定义异常类的使用。

 using System;

namespace it-kiso.com
{
    class Demo
    {
        static void Main(string[] args) 
        {
            TestUserDefinedException test = new TestUserDefinedException();
            try{
                test.validate(12);
            }catch(InvalidAgeException e){
                Console.WriteLine("InvalidAgeException: {0}", e);
            }
            Console.WriteLine("その他のコード");
        }
    }
}
public class InvalidAgeException : ApplicationException
{
   public InvalidAgeException (string message): base(message)
   {
   }
}
public class TestUserDefinedException
{
   public void validate(int age)
   {
      if(age < 18)
      {
         throw (new InvalidAgeException("申し訳ありませんが、年齢は18歳以上でなければなりません"));
      }
   }
} 

操作的结果将是:

InvalidAgeException: InvalidAgeException: 申し訳ありませんが、年齢は18歳以上でなければなりません
   TestUserDefinedException.validate(Int32 age)
   it-kiso.com.Demo.Main(String[] args)

抛出异常

如果异常直接或间接派生自 System.Exception 类,则可以在 catch 语句块中使用 throw 语句来引发异常。这里所谓的抛出异常可以理解为重新抛出异常。 throw语句的语法是:

catch(Exception e) {
   …
   Throw e
}

通俗易懂的《C#异常处理》讲解!您必须观看的 2 个最佳视频

例外処理 | C# |チュートリアル
https://www.youtube.com/watch?v=ZJRg8nrNeeA