.net try-finally功能测试

简介: 一、MSDN中对try-finally语句的解释 finally 块用于清除 try 块中分配的任何资源,以及运行任何即使在发生异常时也必须执行的代码。控制总是传递给 finally 块,与 try 块的退出方式无关。

一、MSDN中对try-finally语句的解释


finally 块用于清除 try 块中分配的任何资源,以及运行任何即使在发生异常时也必须执行的代码。控制总是传递给 finally 块,与 try 块的退出方式无关。

备注

catch 用于处理语句块中出现的异常,而 finally 用于保证代码语句块的执行,与前面的 try 块的退出方式无关。

 

二、案例说明


在此例中,有一个导致异常的无效转换语句。当运行程序时,您收到一条运行时错误信息,但 finally 子句仍继续执行并显示输出。


1、案例代码


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace Finally_test
  6. {
  7.     class Program
  8.     {
  9.         static int i = 123;
  10.         static string s = "Some string";
  11.         static object o = s;

  12.         static void Main(string[] args)
  13.         {

  14.             Test_Exception_Function();
  15.             Console.WriteLine("in Main,After Excute Test_Exception_Function........!");
  16.             Console.ReadLine();

  17.         }

  18.         static void Test_Exception_Function()
  19.         {
  20.             try
  21.             {
  22.                 // Invalid conversion; o contains a string not an int
  23.                 i = (int)o;
  24.             }
  25.             catch (Exception InvalidException)
  26.             {
  27.                 Console.WriteLine("Find Exception in catch " + InvalidException.ToString());
  28.                 Console.ReadLine();
  29.                 return;
  30.             }
  31.             finally
  32.             {
  33.                 /* 如果上面的异常成立,finally里的语句先被执行,才执行return */
  34.                 Console.Write("in finally打印 : i = {0}", i);
  35.                 Console.ReadLine();
  36.             }
  37.             /* 如果上面的异常成立, 这个控制台语句,直接被跳过 */
  38.             Console.WriteLine(" End of Test_Exception_Function ");
  39.         }

  40.     }
  41. }

2、执行效果图

image


三、结论

使用了finally,即使catch中使用Return,还是先会执行完finaly中的语句才会跳出子过程。

上面Test_Exception_Function函数中,try catch finally语句块后的Console.WriteLine(" End of Test_Exception_Function "); 就被无辜的跳过了,直接不执行

相关文章
|
8月前
|
自然语言处理 测试技术 C#
NSubstitute:一个简单易用、灵活多变的.NET单元测试模拟框架
NSubstitute是一个开源的.NET单元测试模拟类库,该框架设计的主要目标是提供一个简单明了、易用性强、贴近自然语言的模拟测试框架。它使得开发者能够专注于测试工作,而不是纠结于测试替代实例的创建和配置。
80 5
|
JavaScript 测试技术 C#
【C#】【xUnit】【Moq】.NET单元测试Mock框架Moq初探!
在TDD开发模型中,经常是在编码的同时进行单元测试的编写,由于现代软件开发不可能是一个人完成的工作,所以在定义好接口的时候我们就可以进行自己功能的开发(接口不能经常变更),而我们调用他人的功能时只需要使用接口即可。
5143 0
|
测试技术 C# Windows
C# WPF 显示图片和视频显示 EmuguCv、AForge.Net测试
原文:C# WPF 显示图片和视频显示 EmuguCv、AForge.Net测试 WPF 没有用到 PictureBox, 而是用Image代替. 下面我试着加载显示一个图片 。 XAML CS Attempt 1: ImageMy_Image=newImage(Openfile.
1779 0
|
Java 测试技术 API
.net core实践系列之短信服务-Api的SDK的实现与测试(二)
.net core实践系列之短信服务-Api的SDK的实现与测试(二)
142 0
.net core实践系列之短信服务-Api的SDK的实现与测试(二)
|
XML JSON API
.net core实践系列之短信服务-Api的SDK的实现与测试(一)
.net core实践系列之短信服务-Api的SDK的实现与测试(一)
259 0
.net core实践系列之短信服务-Api的SDK的实现与测试(一)