看板 C_Sharp 關於我們 聯絡資訊
public class GenericTest { private List<int> intList; public void Set<T>(List<T> list) { //外部呼叫此方法,傳入List<T> //然後將此list給存下來 //類似intList = list之類的 } } 在其他Script會呼叫Set<T>(),將一個List<T>給丟過來 請問如何正確地把該List<T>給存起來? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.75.116.70 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1502420876.A.BA8.html ※ 編輯: brian780405 (211.75.116.70), 08/11/2017 11:08:39
ssccg: 你是List<T>為什麼要存在intList,宣告成GenericTest<T> 08/11 11:20
ssccg: 和 private List<T> genericList; 08/11 11:20
intList那段是打個比喻,如果list是List<int>才用intList存 主要的問題是呼叫Set的那一方知道T是什麼 但收到list的這邊要怎樣知道T是什麼?然後把他存下來? 這邊我一直搞不懂... ※ 編輯: brian780405 (211.75.116.70), 08/11/2017 11:40:13
vi000246: 用getType判斷囉 不然就是用where T 08/11 12:11
julia28: 程式碼呼叫到泛型的function後,compiler會生出一份相對 08/11 12:13
julia28: 應型別的function,寫泛型function時不需要知道T到底是 08/11 12:13
julia28: 什麼 08/11 12:13
ssccg: 用typeof(T)去判斷啊 08/11 13:13
我知道可以用typeof去判斷T,然後就不知道怎麼做了 又不能把T強制轉型成int之類的... ※ 編輯: brian780405 (211.75.116.70), 08/11/2017 13:32:33
james732: 好奇你之後是怎麼解決的? 08/11 17:44
ssccg: 所以你的問題只是不知道怎麼存List<T>的reference? 08/11 18:56
ssccg: 不需要知道T是什麼,用IList(非generic的)就可以吧 08/11 18:57
我做的東西的Set<T>是繼承介面後實做出來的,這篇發文沒提到就是了... 重複看了s大的回文後,想到只要把介面定成泛型介面 這樣就可以達到我的需求 public interface ISet<T> { void Set<T>(List<T> list); } public class GenericTest : ISet<int> { private List<int> intList; public void Set(List<int> list) { intList = list; } } 當初也沒表達清楚就是了... 感謝各位鄉民的幫忙 ※ 編輯: brian780405 (114.32.35.69), 08/14/2017 22:40:05