当前位置: 代码迷 >> C# >> 小弟我所不了解的try{ return }finally{}中的return
  详细解决方案

小弟我所不了解的try{ return }finally{}中的return

热度:69   发布时间:2016-05-05 03:54:06.0
我所不了解的try{ return }finally{}中的return!

背景

  • 四月初一篇文章《你真的了解try{ return }finally{}中的return?》引起了大家的关注,本文介绍了try、finally同时操作一个数据所经历的过程。

  • 但是因为作者用值类型作为举例类型,我心里就难免怀疑它对引用类型的操作是怎么样的,自己测试代码,还真的出现了问题,我自己无法解决。希望大神给我点提示。


  • 代码

    class Program    {        static void Main(string[] args)        {            Program t = new Program();            int y = t.aaa();            List<string> list = t.GetList();            Console.ReadLine();        }        public int aaa()        {            int x = 1;            try            {                return ++x;            }            catch (Exception e)            {            }            finally            {                ++x;            }            return x;        }        public List<string> GetList()        {            var list = new List<string>() { "aaa" };            try            {                list.Add("bbb");                return list;            }            catch (Exception)            {            }            finally            {                list.Add("ccc");            }            return list;        }    }

    疑问

    如果按照原作者的逻辑,GetList()这个方法返回的应该是包含“aaa”,“bbb”两个字符串的list,但是结果却返回了“aaa”“bbb”“ccc”三个数据的list,而且最变态的是,如果我将这个方法改为返回list.Count,返回的结果是2,希望大神能帮我解释一下原因?


  •  

  • 3楼弎吩锺熱℃
    finally语句块是在try语句块之后执行的,而try语句块中已经返回,所以:,,返回值类型,实际返回的是值类型的副本,就算值更新,返回值也不会更新。,返回引用类型,实际返回的是引用类型的指针,指针指向的内存值变了,返回值也就跟着变了。,,值类型和引用类型导致的差异,也就是值和指针的差异。(这仅为个人猜测,仅供参考)
    Re: 代码小兵的成长
    @弎吩锺熱℃,那为什么如果我的方法返回的是list.Count,为什么是2不是3?既然对同一个引用类型操作,那么在Finally操作完List后,list对应的数量已经变为3了吧?
    2楼西酉
    值类型和引用类型导致的差异,还有函数语句执行的顺序和赋值值传递的顺序过程
    1楼VD630
    PO主你上一篇白写了啊。。。。。擦汗
      相关解决方案