如果你想混用不同泛型类型(所以有含有MyClass<int>
和MyClass<string>
的集合),你需要定义一些常用的基本类型或使用不强类型集合:
public class MyClass<T> : MyClass
{
public T Value2 { get; set; }
}
public class MyClass
{
public string Value1 { get; set; }
public string Value3 { get; set; }
}
然后你可以这样定义一个集合:
List<MyClass> list = new List<MyClass>();
list.Add(new MyClass<int>());
list.Add(new MyClass<string>());
你将不得不投结果磨片n检索条目,以便访问他们的Value2
属性。
另一种选择,以避免基类是简单地用一个List<object>
:
List<object> list = new List<object>();
list.Add(new MyClass<int>());
list.Add(new MyClass<string>());
但它同样的问题同上,但振振有词糟糕(因为这样你可以在那里存放什么)
编辑:如何允许在非基类非MyClass
中对Value2
进行无类型访问的方法有多种。一种方法是定义在基类的它的“类型化”版本,并覆盖其上会进行类型检查的子类:
public abstract class MyClass
{
public string Value1 { get; set; }
public abstract object Value2Untyped { get; set; }
public string Value3 { get; set; }
}
public class MyClass<T> : MyClass
{
public T Value2 { get; set; }
public override object Value2Untyped
{
get
{
return Value2;
}
set
{
Value2 = (T)value;
}
}
}
然后为所有对象或集合被输入对基础非 - 通用MyClass
,您仍然可以访问值,甚至可以在运行时设置值。 (set
当然是可选的)
你知道吗,如果你想把它们放到一个集合中,你需要从对象中返回'int'和'string'? –
是的,我明白 – cableload
可能的重复/相关:http://stackoverflow.com/questions/15833397/generic-collection-in-generic-class/15833511#15833511 – Clint