所以我有一個對象,可以說Item<U>
。我想創建一個包含這些項目集合的(n)(I)List<T>
。我遇到的問題是Item<U>
的集合可以有任意數量的不同類型的U。我想不出的是IList
的簽名。我嘗試了IList<Item<T>>
,但是因爲我沒有(在要使用IList
的類中)定義了T
(正如我所說的varys),我不能使用這個簽名。達到這一要求的最佳方式是什麼?創建項目<U>的IList <T>?
回答
您需要爲您的Item<U>
添加一個非通用接口,並使這些接口不在這些接口中。
您無法創建IList<Item<T>>
的集合,其中T是您希望放入同一列表的許多不同對象類型的某種基本類型。這是co(ntra) - 方法,具體禁止這一點。
因此,您需要改爲添加一些通用的東西,這不是通用的,並將其列表出來。例如,您可以使Item<T>
執行IItem
,並創建IList<IItem>
。
這是你可以做的最好的。
你可以讓你的通用方法,如:
public void DoSomethingWithTheList<T>(IList<Item<T>> theList)
{
//Do that something
}
你可以試試這個
class Item<U>
{
...
}
class Item : Item<object> {
...
}
....
IList<Item> itemList;
您仍然無法將item
我認爲你只是想要一個IList<Item<U>>
。關鍵在於T
以通用類型IList<T>
的名義只是一個佔位符 - 它沒有任何特殊的含義。你想要一個Item<U>
的清單,所以只需製作一個。
現在,這當然意味着包含此IList
的方法/類本身在U
中是泛型的,但這似乎是由您的問題的條款決定的。
IList是爲了保持單一類型。要確定某件事是否是「單一類型」,您必須展開所有類型參數。以您的IList<Item<T>>
爲例,T
必須是特定實例的唯一一件事。
例如,你可以挑選Animal
爲T
,然後繼續把Dog
,Cat
,並且Bear
實例在IList
。但是你不能在那裏放置任意類型的東西;他們必須能夠被轉換爲您爲T
指定的類型。如果您的類型爲而且沒有這種關聯,則除了爲列表設置非通用接口外,沒有其他選擇。您也可以考慮爲T定義一個接口類型,以確保您的所有符合條件的項目都符合。
一旦你決定什麼T
會,你就可以讓你的方法一般:
public void PrintItems<T>(IList<Item<T>> list)
{
// ...
}
它有點在.net 3痛苦的,因爲ü被當作所有項目的不同獨立類型。爲了使它工作,你必須手動引入接口,用於這種類型:
interface IItem{}
class Item<U>:IItem {...}
,現在你可以:
IList<IItem> list = new IList<IItem>();
list.Add(new Item<string>());
list.Add(new Item<int>());
或者你可以堅持非泛型列表。
- 1. IList <IList<T>>到IReadonlyCollection <IReadonlyCollection <T>>
- 2. 轉換「任務<IList<T>>」到「的IList <T>」
- 3. IEnumerable <>到IList <>
- 4. 使用LINQ,如何將IList <IList <object>>轉換爲IList <object>?
- 5. 投的IList <int>到IList的<string>
- 6. AutoMapper:複製的IList <>到的IList <>
- 7. 如何實例化嵌套IList <T>的IList <T>?
- 8. IList的C#參數<IList <(ClassType)>>
- 9. 自IList <object_type>
- 10. 由TGT創建iSCSI目標不能
- 11. Binding Gridview to IList <BusinessObject>包含IList <BusinessObject>
- 12. 將IList <T1>轉換爲IList <BaseT1>
- 13. 如何初始化IList <IList <string>>?
- 14. 將IList <Object>投射到IList <CustomObject>?
- 15. 是否收集<T>包裝IList <T>或枚舉IList <T>?
- 16. 從IList中刪除項目<Log>其中logist在IList中存在<short>
- 17. Automapper映射IList <>到Iesi.Collections.Generic.ISet <>
- 18. IList <T> to IQueryable <T>
- 19. IList <InterfaceType>爲List <ImplementsInterfaceType>?
- 20. AutoMapper與IList的<Item>
- 21. 的IList <mutable_struct> VS mutable_struct []
- 22. 的IList <T>,IEnumerable的<T>和的ObservableCollection <T>
- 23. 創建一個類型爲IList <>的類字段?
- 24. 避免不必要的列表創建由於 - IList <> .ToList()
- 25. 試圖調用int IList <Location> .IndexOf(位置項目)方法
- 26. 序列不包含任何元素 - IList <T>有項目
- 27. 任務<IList<>>爲Func鍵<>的結果
- 28. 創建通用IList方法<T>方法
- 29. RhinoMocks:</p> <pre><code>var someList = MockRepository.GenerateStub<IList<ISomething>>(); someList.Add(MockRepository.GenerateStub<ISomething>()); </code></pre> <p>列表被作爲代理創建正確:IList的<T>存根它已經被掐滅
- 30. QueryOver IList <string> property
這似乎是乾淨的方式來完成我所需要的。出於某種原因,它只是沒有到我這裏來。謝謝。 – 2009-12-17 14:14:56