代码之家  ›  专栏  ›  技术社区  ›  Mike Q

C#:非泛型类型中的泛型成员?

  •  4
  • Mike Q  · 技术社区  · 14 年前

    我有一个包含对象列表的自定义控件。控件由可视化设计器实例化,然后在代码中配置。控件是显示实体列表的网格。

    我有这样的初始化方法。

    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> 这不管用。

    我不能使类成为泛型,因为它是一个不能有泛型类型的控件。无法复制集合,因为控件必须修改传入的集合,而不是复制并修改该集合。

    我该怎么办?

    3 回复  |  直到 14 年前
        1
  •  2
  •   thecoop    14 年前

    ICollection<T> 不支持这样的泛型差异。在我看来,你的选择是:

    1. ICollection<T> 包裹着 ICollection<IPersistentObject> 帮你检查字体。
    2. 使用 IEnumerable<T>
    3. 使用非泛型 IList
        2
  •  3
  •   Alex McBride    14 年前

    如果不需要将obj作为实际的集合(例如 Add / Remove 方法等…)然后你可以替换 ICollection IEnumerable

    void Initialise(ISession session, Type type, IEnumerable<IPersistentObject> objs)
    
        3
  •  0
  •   Matt Howells    14 年前

    可以将成员变量更改为非泛型 ICollection ,并根据需要进行浇铸。