try-catch-finally的含有return使用揭秘

很多人都会纠结这么一个问题try-catch-finally中有return的情况,我自己总结如下:

如果是值类型的话

请看代码

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;

 namespace 含有return的测试
 {
     class Program
     {
         static void Main(string[] args)
         {
             int j = Test();
             Console.WriteLine(j);

         }
         /// <summary>
         /// 这个是测试return里面的是值类型就不会对他们有影响呢
         /// </summary>
         /// <returns></returns>
         static int Test()
         {
              ;

             try
             {

                 return i; //为什么这里要加个return呢
             }
             catch (Exception)
             {

                 i++;
                 return i;

             }
             finally
             {
                 i = i + ;
             }

         }

     }
 }

通过上面的代码可以看出,这里的finally执行了之后,对return返回没有影响 return返回结果还是0;
try-catch-finally的含有return使用揭秘

以下是返回值是引用类型

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;

 namespace 引用类型测试
 {
     class Program
     {
         static void Main(string[] args)
         {
             List<string> strList = Test();
              foreach (var i in strList)
             {
                 Console.WriteLine(i);
             }
             Console.ReadKey();
         }
         private static List<string> Test()
         {
             List<string> strList = new List<string>();
             strList.Add("aa");
             strList.Add("bb");
             strList.Add("cc");
             try
             {
                 //这里没有发生异常的
                 strList.Add("trytry");
                 return strList;
             }
             catch (Exception ex)
             {
                 strList.Add("zzz");
                 return strList;
             }
             finally
             {
                 strList.Add("yyy");
             }
         }  

     }
 }

输出结果如下:

try-catch-finally的含有return使用揭秘

通过以上两个例子可以总结出来如果是值类型的话,finally里面的改变不会对try或者catch中的return返回值造成影响。

如果是引用类型的话,finally里面的改变会对try或者catch中的return返回值造成影响。

至于为什么会出现这个结果: 我还在思考中,欢迎大家讨论

 
上一篇:Discuz常见小问题-如何设置为人工审核


下一篇:django: db - admin