try后的finally {}里的代码会不会被执行,什么时候被执行?

本文深入探讨了C#编程语言中的try-finally语句用法,特别关注其在数据库查询操作中的应用。通过具体代码示例,解释了try-finally语句的工作原理,包括返回值的暂存与finally块的作用,以及如何确保资源的正确释放。同时,文章还介绍了在执行数据库查询时如何利用try-finally确保资源的有效管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看下面一段代码

        static void Main(string[] args)
        {
            Console.WriteLine(GetIt());
            Console.ReadKey();
        }

        static int GetIt()
        {
            int i = 8;
            try
            {
                i++;
                Console.WriteLine("a");
                return i;
            }
            finally
            {
                Console.WriteLine("b");
                i++;
            }
        }

上面程序的执行结果是:ab9

        static void Main(string[] args)
        {
            //Console.WriteLine(GetIt());
            Console.WriteLine(GetPerson().Age);
            Console.ReadKey();
        }

        static Person GetPerson()
        {
            Person p = new Person();
            p.Age = 8;
            try
            {
                p.Age++;
                Console.WriteLine("a");
                return p;
            }
            finally
            {
                Console.WriteLine("b");
                p.Age++;
            }
        }

上面程序的执行结果是:ab10

也就是说我们在执行到try 里面return语句时,先记录下要返回的值,但是并没有返回,而是去执行ffinally里面的语句,执行完成后,再返回try里面的先前记录的结果

让我们看看读取数据库中数据的条数的

public int QueryCount()
{
   …..
   try
   {
      return cmd.ExecuteScalar();
   }
   finally
   {
      cmd.Dispose();
   }
}

先执行cmd.ExecuteScalar(),把返回值暂时存起来,然后再去执行finally(钱放在这,我去劫个色),然后把返回值返回。return都是最后执行,但是return后的表达式的计算则是在finally之前。

如果C#设计的是先执行cmd.Dispose()再执行return就会出现return执行失败了,因为cmd已经Dispose了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值