try-catch-finally对返回值的影响

本文探讨了在C#中,finally块内修改不同类型的返回值(如值类型、引用类型等)对最终返回结果的影响。通过具体示例,解释了在不同情况下finally块的行为及其对返回值的影响。

catch 和 finally 一起使用的常见方式是:在 try 块中获取并使用资源,在 catch 块中处理异常情况,并在 finally 块中释放资源。

 finally 块用于清理try块分配的任何资源,无论try中是否异常或者终止(return),finally块都会执行。

如果在finally块中修改了返回值,会对最终返回的结果有何影响呢?

1,如果返回值是值类型

//finally执行,i值是2013,但是最终返回2015
static int test()
        {
            int i = 2016;
            try
            {
               i=2015;
               return i;
            }
            catch
            {
               //有异常才会到这里
               i=2014;
return i; }
finally { i=2013; } }

2,返回string类型,是否会影响呢,答案是不会影响。

//finally块执行,s值是“tiger”,但是最终返回dog
static string test()
        {
            string s = "cat";
            try
            {
               s="dog";
               return s;
            }
            catch
            {

           //有异常才会到这里
            s="duck";
             return s;

            }
            finally
            {
                s="tiger";
            }
           
        }

3,返回数组又会如何呢?

//finally块执行,影响了最终返回结果,返回{ "e", "b", "c" };
static string[] test()
        {
            string[] arr = { "a", "b", "c" };
            try
            {
               arr[0]="d";
               return arr;
            }
            catch
            {
               //有异常才会到这里
               arr[0]="f";
return arr; }
finally { arr[0]="e";; } }

4,对象跟数组一样,finally修改对象后,最终返回的是finally修改后的对象。

 

注意:

1,finally块中不能有 return语句,当然vs会报错。

2,如果finally块之后还有return语句,该如何返回呢?即 try{ }catch(){} finally{} return x;

finally块肯定执行,这里主要看try和catch是否执行了return语句,如果执行了,finally块后面的语句就不执行了。

当然,如果try和catch块都含有return语句,那么肯定会执行其中一个,finally块后面的的语句就不会执行了,这是vs会提示“检测到无法访问的代码”,

示例

//返回“dog”,加入有异常会返回“duck”,
static string test()
        {
            string s = "cat";
            try
            {
               s="dog";
               return s;
            }
            catch
            {
           //有异常才会到这里
            s="duck";
             

            }
            finally
            {
                s="tiger";
            }
            
            return s;//假如try正确返回了,就不会执行。
        }

 

转载于:https://www.cnblogs.com/imust2008/p/5611916.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值