VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > c#教程 >
  • C#教程之C#教程之C#高阶与初心:(一)List.Add添加的到底

本站最新发布   C#从入门到精通
试听地址  
https://www.xin3721.com/eschool/CSharpxin3721/

    前几日与同事讨论一个相对复杂的场景,需要先将中间过程存储在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对应的项上。

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

相关教程