很多人都会纠结这么一个问题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;
以下是返回值是引用类型
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"); } } } }
输出结果如下:
通过以上两个例子可以总结出来如果是值类型的话,finally里面的改变不会对try或者catch中的return返回值造成影响。
如果是引用类型的话,finally里面的改变会对try或者catch中的return返回值造成影响。
至于为什么会出现这个结果: 我还在思考中,欢迎大家讨论