码迷,mamicode.com
首页 > Windows程序 > 详细

C#高阶与初心:(一)List.Add添加的到底是什么?

时间:2018-01-29 17:32:59      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:list   class   变量   问题   就是   color   ntc   面向   这不   

        前几日与同事讨论一个相对复杂的场景,需要先将中间过程存储在List中,稍后再用。同时程序类的许多线程共用了一个全局变量。

具体来说就是如下代码

。。。
_order = order1;
_list.Add(_order);
。。。
_order = order2;
_list.Add(_order);
。。。
_order = order3;
_list.Add(_order);
。。。
_list.ForEach(o => PrintContent(o));
。。。

        对于打印内容,到底是1、2、3不同内容呢,还是都是3的内容?大家意见不一。运行一下看看结果,当然是最简单的事情,这也不是最重要的。重要的是,玩儿C#这么多年,对于这么个简单的问题,我们都有自己的见解。

        一边认为,既然都是将_order添加进去,而_order又在不断变化,最后肯定是都是一样的内容。另一边认为,记录的应该是内存的实际指向,除非记录的位置明确被更改,否则不应该变化,不会随之中间变量的变化而变化。

        事实证明,后者是正确的。发散一下,如果是结构体(虽然现在已经用的很少了)的话,情况又有不同。。。如果在list添加进去一个结构体,然后对传入的中间变量进行更改,并不会反映的list对应的项上。

        其实回头想想,这不就是我们初学面向对象语言时经常遇到的,对于一个函数形参的指针传递与值传递问题吗?

C#高阶与初心:(一)List.Add添加的到底是什么?

标签:list   class   变量   问题   就是   color   ntc   面向   这不   

原文地址:https://www.cnblogs.com/ceachy/p/WhatDoesListAdd.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!