Re: [問題] 已經建好的List<Struct>能夠修改裡面的 …

看板C_Sharp (C#)作者 (躂躂..)時間18年前 (2007/08/03 04:07), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《reptile0426 ( )》之銘言: : ※ 引述《gardenest (股海尋燈)》之銘言: : : 我現在有一個List,它的形態是struct : : List<Struct> : : 我現在add了好幾個struct進去這個List裡頭。 : : List<Sort> list_sort = new List<Sort>(); : : Sort sort = new Sort(); : : list_sort.add(sort) : arraylist是這樣 list我記得是一樣的東西(就這方面來說) : 加進去LIST的都會變成 object物件 : 可是因為object是個...甚麼東西都可能的物件 : 所以你不能用 : list_sort[1].xxxx 因為沒這個東西 他已經是用 generic collection了, 所以 list_sort[1] 本身就是 Sort 沒有問題.. 問題在於 List 內放的東西是 value type(Sturct等) 所以 list_sort[1].xxx = ooo; 變成只是在修改 list_sort[] 這個call所傳回的另一個 Sort 的副本.. 因為這樣沒有意義, 所以 C# 直接禁止這樣寫.. 如果把 Sort 由 Sturct 改成 Class(reference type)就不會有這個錯誤了.. 解決的方法就是修改傳回的副本的值, 再放回原本的位置就可以了~ 像是: Sort s = list_sort[1]; s.xxx = ooo; list_sort[1] = s; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.139.185.65

08/03 10:05, , 1F
感謝大大分享~~我再去試看看^^
08/03 10:05, 1F

08/06 18:39, , 2F
大大你講的那二個方法我都有試~都可以使用~感恩^^
08/06 18:39, 2F

08/09 13:48, , 3F
除非是大量洗,否則少用struct這種Value Type的東西
08/09 13:48, 3F
文章代碼(AID): #16iZcSH5 (C_Sharp)
文章代碼(AID): #16iZcSH5 (C_Sharp)