我所不了解的try{ return }finally{}中的return!_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 我所不了解的try{ return }finally{}中的return!

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

 2015/5/6 3:31:41  代码小兵的成长  程序员俱乐部  我要评论(0)
  • 摘要:背景四月初一篇文章《你真的了解try{return}finally{}中的return?》引起了大家的关注,本文介绍了try、finally同时操作一个数据所经历的过程。但是因为作者用值类型作为举例类型,我心里就难免怀疑它对引用类型的操作是怎么样的,自己测试代码,还真的出现了问题,我自己无法解决。希望大神给我点提示。代码classProgram{staticvoidMain(string[]args){Programt=newProgram();inty=t.aaa();List<
  • 标签:all

背景

  • 四月初一篇文章《你真的了解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,希望大神能帮我解释一下原因?


  •  

  • 发表评论
    用户名: 匿名