代码之家  ›  专栏  ›  技术社区  ›  Johnny

如何返回具有任意类型成员的IList

  •  3
  • Johnny  · 技术社区  · 15 年前

    我不确定这是否可能,但我想说:我有一个班 Zoo 它保存着一本动物类型字典——动物列表。例如

    Cat Type -> {Cat1, Cat2}
    Zebra Type -> {Zebra1, Zebra2}
    

    Cat Zebra 是的子类 Animal . 现在 动物园 有一种方法 IList<Animal> GetAnimalsOfType(Type type) .

    我希望返回值是所请求的动物的类型,因此不要获取 我是动物 我会得到一个 IList<Cat> IList<Zebra> 根据动物的类型,我传入了类型参数。

    这有可能吗?如果是这样怎么办?

    2 回复  |  直到 15 年前
        1
  •  11
  •   Mehrdad Afshari    15 年前

    是的,像这样的东西当然可以使用泛型。我想你在找这个:

    IList<T> GetAnimalsOfType<T>() where T : Animal {
        return dictionary[typeof(T)].OfType<T>().ToList();
    }
    

    这和你在问题中提到的有区别。类型是 作为参数传递。因为参数是在运行时传递的,所以如果返回强类型列表,就没有意义。编译器无论如何也不知道,您也无法使用它。

        2
  •  2
  •   Klaus Byskov Pedersen    15 年前

    可以使用泛型方法。就像这样:

    public IList<T> GetAnimals<T>(){
        return this.animals[typeof(T)].Cast<T>().ToList();
    }