C#:非泛型类型中的泛型成员?
我有一个包含对象列表的自定义控件。该控件由可视化设计器实例化,然后在代码中进行配置。该控件是一个显示实体列表的网格。C#:非泛型类型中的泛型成员?
我有一个像这样的初始化方法。
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
但现在我想将OBJ文件参数分配给ICollection<IPersistentObject>
类的成员变量不工作。
我不能使类通用,因为它是一个控件,不能有泛型类型AFAIK。我不能复制集合,因为控件必须修改传入的集合,而不是复制并修改它。
我该怎么办?
ICollection<T>
不支持这样的通用差异。在我看来,你的选择是:
- 代码的包装围绕
ICollection<T>
一个包装了ICollection<IPersistentObject>
并执行类型检查你。 - 改为使用
IEnumerable<T>
,它确实支持您描述的方式的变化。 - 如果您的具体类实现它,请使用非通用
IList
。
您可以将成员变量更改为非通用ICollection
,并根据需要进行强制转换。
由于'ICollection
如果你不需要到OBJ文件是一个实际的集合(例如用Add
/Remove
方法等),那么你可以更换ICollection
与IEnumerable
。
void Initialise(ISession session, Type type, IEnumerable<IPersistentObject> objs)
不幸的是我需要添加/删除,因为列表将被控件修改。 – 2010-10-19 12:03:24
1号为我工作,谢谢。 – 2010-10-19 16:13:29