不同的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
,列必须具有公共基类型。 最接近的DateColumn
和DateColumn
公共基类是object
。 既不是源于Column
而是源于Column
的特定且不同的实例化。
这里的一个解决方案是引入一个非通用的Column
类型, Column
从List
派生并存储它
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
。