陷阱~关于引用类型,请不要模棱两可!

引用类型总是那么神秘,原因就是因为它存储的是内存地址,对于一个引用类型的变量来说,你在进行赋值操作时,实现上是以地址的形式传递的,当你在代码段中对一个引用类型操作时,他会反应到原对象上,以下我说几个引用类型常见的用法:

情况一:定义集合变量后,修改它的内容元素,会影响原对象吗?

答:对的,会反映到元集合上

代码:

            List<Yinyong> yiyi = new List<Yinyong> { new Yinyong { ID = 1, Name = "zzl" }, new Yinyong { ID = 2, Name = "bobo" } };
            yiyi[0].Name = "修改zzl";
            //其它业务
            Console.WriteLine(yiyi[0].Name);
            //结果:修改zzl

情况二:定义集合变量后,将它的部分元素添加到另一个集合中,在另一个集合中修改它的元素,是否会反映到原集合?

答:会的,会反映到元集合上

代码:

复制代码
            List<Yinyong> yiyi = new List<Yinyong> { new Yinyong { ID = 1, Name = "zzl" }, new Yinyong { ID = 2, Name = "bobo" } };
            List<Yinyong> temp = new List<Yinyong>();
            temp.AddRange(yiyi.Where(i => i.ID == 1));

            foreach (var item in temp)
            {
                item.Name = "修改name";
            }
            //结果:修改name
复制代码

情况三:定义集合变量后,将它以参数的形式传给其它方法,在其它方法中修改这个对象,是否会反映到原方法的原集合上?

答:会的,会反映到元集合上

代码:

复制代码
  static void Main(string[] args)
        {
         List<Yinyong> yiyi = new List<Yinyong> { new Yinyong { ID = 1, Name = "zzl" }, new Yinyong { ID = 2, Name = "bobo" } };
         ModifySet(yiyi);
       }
       /// <summary>
        /// 修改yiyi这个对象,而这个对象是在主方法里定义的
        /// </summary>
        /// <param name="yiyi"></param>
        static void ModifySet(List<Yinyong> yiyi)
        {
            yiyi[0].Name = "修改第一个元素的name属性";
        }
复制代码

 

好了,掌握了上面三点之后,我们在写代码时会更加得心应手,我们只有掌握好基础知识,才能设计出更好的程序!

posted @   张占岭  阅读(708)  评论(2编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2012-09-25 将不确定变为确定~Linq-Distinct()方法是否可以对复杂结果集进行去重?
点击右上角即可分享
微信分享提示