C#异常

Posted HelloCopyer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#异常相关的知识,希望对你有一定的参考价值。

介绍内容

  • 什么是异常

  • try语句

  • catch子句

  • finally子句

什么是异常

异常是程序中的运行时错误,它违反了系统约束或应用程序约束,或出现了在正常操作时未预料的情形。例如,程序试图除以0或试图写一个只读文件。当这些发生时,系统捕获这个错误并抛出(raise)一个异常。

如果程序没有提供处理该异常的代码,系统会挂起这个程序。例如,下面的代码在试图用0除一个数时抛出一个异常:

static void Main(){ int x = 10, y = 0; x /= y; //用0除以一个数时抛出一个异常}

当这段代码运行时,系统显示下面的错误信息:

Unhandled Exception: System.DivideByZeroException: Attempted to divide by zero. at Exceptions_1.Program.Main() in C:\Progs\Exceptions\Program.cs:line 12

try语句

try语句用来指明为避免出现异常而被保护的代码段,并在发生异常时提供代码处理异常。try语句由3个部分组成:

  • try块包含为避免出现异常而被保护的代码。

  • catch子句部分含有一个或多个catch子句。这些是处理异常的代码段,它们也称为是异常处理程序。

  • finally块含有在所有情况下都要被执行的代码,无论有没有异常发生。

static void Main(){ int x = 10;
try { int y = 0; x /= y; //抛出一个异常 } catch { ... //处理异常的代码
Console.WriteLine("Handling all exceptions - Keep on Running"); }}

这段代码产生以下消息。注意,除了输出消息,没有异常已经发生的迹象。

Handling all exceptions - Keep on Running

catch

catch子句处理异常。它有3种形式,允许不同级别的处理。

1catch{ //1.catch关键字之后没有任何参数 //2.匹配try块中引起的任何类型异常 Statements}
2catch(ExceptionType){ //1.带有异常类的名称作为单一参数 //2.匹配任何该名称类型的异常 Statements}
3:catch(ExceptionType ExceptionVariable){ //1.在异常类名称之后包括一个标识符 //2.该标识符在catch字句块中相当于一个本地变量,并被成为异常变量 //3.异常变量引用异常对象,并能被用于访问该对象信息 Statements}

finally

如果程序的控制流进入了一个带finally块的try语句,那么finally始终会被执行。

  • 如果在try块内部没有异常发生,那么在try块的结尾,控制流跳过任何catch子句并到finally块。

  • 如果在try块内部发生了异常,那么在catch子句段中无论哪一个适当的catch子句被执行,接着就是finally块的执行。

try{ if (inVal < 10) { Console.Write("First Branch - "); return; } else Console.Write("Second Branch - ");}finally{ Console.WriteLine("In finally statement");}

这段代码在inVal值为5时产生以下输出:

First Branch - In finally statement

以上是关于C#异常的主要内容,如果未能解决你的问题,请参考以下文章

c#代码片段快速构建代码

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?

是否可以动态编译和执行 C# 代码片段?

C#常用代码片段备忘

优化 C# 代码片段、ObservableCollection 和 AddRange

VS2015使用技巧 打开代码片段C#部分