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


        前幾日與同事討論一個相對復雜的場景,需要先將中間過程存儲在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對應的項上。

        其實回頭想想,這不就是我們初學面向對象語言時經常遇到的,對於一個函數形參的指針傳遞與值傳遞問題嗎?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM