我有一个自定义控件,其中包含一个对象列表。控件由可视化设计器实例化,然后在代码中配置。控件是一个显示实体列表的网格。
我有这样的初始化方法。
public void Initialise(ISession session, Type type, ICollection<IPersistentObject> objs)
IPersistentObject是一个接口。但是,当我想分配一个实现IPersistentObject的东西的集合时,这不起作用。
所以我改成了它。
public void Initialise<T>(ISession session, Type type, ICollection<T> objs) where T : class, IPersistentObject
但是现在我想将objs参数分配给ICollection<IPersistentObject>
类型的成员变量,该变量不起作用。
我不能使该类具有通用性,因为它是一个不能具有泛型类型AFAIK的控件。我无法复制集合,因为控件必须修改传入的集合,而不是复制并修改它。
我该怎么办?
答案 0 :(得分:3)
如果您不需要将objs作为实际集合(例如使用Add
/ Remove
方法等),那么您可以将ICollection
替换为IEnumerable
}。
void Initialise(ISession session, Type type, IEnumerable<IPersistentObject> objs)
答案 1 :(得分:2)
ICollection<T>
不支持这样的通用差异。在我看来,你的选择是:
ICollection<T>
编写包装ICollection<IPersistentObject>
的包装,并为您进行类型检查。IEnumerable<T>
,它确实支持您描述的方式的差异。IList
。答案 2 :(得分:0)
您可以将成员变量更改为非泛型ICollection
,并根据需要进行投射。