유형 안전 일반 가방을 모두 구현해야하는 항목이 있어야합니다.제네릭 인터페이스를 모두 구현하는 유형의 유형 안전 백을 만들려면 어떻게해야합니까?
이var stringItem = new IItem<string>();
var numberItem = new IItem<int>();
var items = new List<IItem<T>>(); //T of course doesn't accomplish what I want
items.Add(stringItem);
items.Add(numberItem);
뭔가 같은 : 다음
interface IItem
{
object Value { get; set; }
}
//Update: 2009-03-19 03:08 PM MST
//Added the following interface for clarity of my question
interface IItem<T> : IItem
{
new T Value { get; set; }
}
, 내가 할 수있는 :
var items = new List<IItem>();
그러나 나는 내 가방에 형태의 안전성을 잃게
욕망은 그런 짓을하는 것입니다 . 그래서, Dictionary
생각 :
var dict = new Dictionary<Type, List<IItem<T>>>(); //T is wrong again
dict.Add(typeof(string), new List<IItem<string>>); //that sure looks nice
나는 더 우아한 해결책이 있다는 것을 알고 있습니다. 결국 제네릭 자체가 .NET에 추가되었습니다. 아마도 C# 4.0의 역학은이 답변에 대한 더 명확한 경로를 제공 할 것입니다. 나는 우리 모두가 현명한 타입 응답을 이해할 정도로 똑똑하지 않다고 가정하고 있습니다. :) –
혼합 가방으로 무엇을 할 계획인지 대략 설명한다면 도움이 될 것입니다. –
불쾌한 object-vs-type-safe-generic 인터페이스 상속과 함께 갈 것입니다. 내 가방의 경우 유형별 항목의 하위 집합을 가져 오는 깔끔한 LINQ 쿼리를 추가했습니다. public IEnumerable> GetItems () {Type t = typeof (T); return (IEnumerable >) Items.Where (i => i.Value.GetType() == t); } –