看板 C_Sharp 關於我們 聯絡資訊
※ 引述《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
gardenest:感謝大大分享~~我再去試看看^^ 08/03 10:05
gardenest:大大你講的那二個方法我都有試~都可以使用~感恩^^ 08/06 18:39
tomex:除非是大量洗,否則少用struct這種Value Type的東西 08/09 13:48