不同的Generics T在同一个集合中

public abstract Column { private T Value {get;set;} public abstract string Format(); } public class DateColumn : Column { public override string Format() { return Value.ToString("dd-MMM-yyyy"); } } public class NumberColumn : Column { public override string Format() { return Value.ToString(); } } 

我遇到的问题是将这些添加到通用集合中。 我知道它可能,但我怎样才能在集合中存储多种类型等

 IList<Column> columns = new List<Column() 

我真的很感激有关实现这一目标的任何建议。 目标是将不同的列类型存储在同一个List中。 值得一提的是我使用NHibernate和鉴别器来加载适当的对象。最后,Value需要具有类的类型。

非常感谢您的帮助。

为了存储在List ,列必须具有公共基类型。 最接近的DateColumnDateColumn公共基类是object 。 既不是源于Column而是源于Column的特定且不同的实例化。

这里的一个解决方案是引入一个非通用的Column类型, ColumnList派生并存储它

 public abstract class Column { public abstract object ValueUntyped { get; } } public abstract class Column : Column { public T Value { get; set; } public override object ValueUntyped { get { return Value; } } } ... IList list = new List(); list.Add(new DateColumn()); list.Add(new NumberColumn()); 

generics都是关于指定类型的。 如果要使用动态类型,请改用经典ArrayList

从一个非generics的Column类派生它可能是有意义的,它包含了Column的非generics公共接口……然后将列表声明为List