C# 改變容器裡面結構體的值

來源:互聯網
上載者:User

List<SendMessage> sendingMessages = null;

if(sendingMessages !=
null && sendingMessages.Count > 0){

// Debug.Log("current in sending msg: " + sendingMessages.Count);

for(int i=0; i<sendingMessages.Count; i++){

// Debug.Log("msg time: " + msg.time.ToString());

SendMessage msg = sendingMessages[i];

msg.time +=
Time.deltaTime;  

因為剛做unity沒多久,c#是現學現用,上次又遇到一個坑,

SendMessage msg = sendingMessages[i];

msg.time += Time.deltaTime;  

這樣代碼寫完以後我以為list裡面對應的值被改變了,結果後來證明是沒有變化的,

查資料發現結構體是實值型別的,我這樣寫改變的是一份拷貝,

解決方案有2個:

1, 最後再加上:

sendingMessages[i] = msg;

2,把容器裡面結構體改稱類

根據c#進階編程裡面的說法,

結構體在c#裡面是實值型別,

SendMessage msg;不是一個引用,已經建立了一份記憶體,所以結構體可以new,也可以不new

都是用的這一份記憶體。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.