C# 如何返回包含任意类型成员的IList

C# 如何返回包含任意类型成员的IList,c#,generics,C#,Generics,我甚至不确定这是否可行,但我有一个类Zoo,其中包含一个动物类型字典->动物列表。e、 g Cat Type -> {Cat1, Cat2} Zebra Type -> {Zebra1, Zebra2} 猫和斑马是动物的亚类。现在Zoo有了一个方法IListGetAnimalsOfType(Type Type) 我希望返回值是所请求动物的类型,因此,不是获取IList,而是获取IList或IList,具体取决于我在type参数中传递的动物类型 这可能吗?如果是,怎么做?是的,使用泛

我甚至不确定这是否可行,但我有一个类
Zoo
,其中包含一个动物类型字典->动物列表。e、 g

Cat Type -> {Cat1, Cat2}
Zebra Type -> {Zebra1, Zebra2}
斑马
动物
的亚类。现在
Zoo
有了一个方法
IList
GetAnimalsOfType(Type Type)

我希望返回值是所请求动物的类型,因此,不是获取
IList
,而是获取
IList
IList
,具体取决于我在type参数中传递的动物类型


这可能吗?如果是,怎么做?

是的,使用泛型肯定可以实现类似的功能。我想你在找这个:

IList<T> GetAnimalsOfType<T>() where T : Animal {
    return dictionary[typeof(T)].OfType<T>().ToList();
}
IList GetAnimalsOfType(),其中T:Animal{
返回类型()的字典[typeof(T)]。ToList();
}

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

您可以使用泛型方法。事情是这样的:

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

+1,我想你可能会因为“两行代码中T的最有效使用”而获奖@JaredPar:如果有这样的奖项,我会将
ToList()
调用改为
ToList()
@Mehrdad,但是这样你就不会最大化类型推断,从而使你的徽章无效:)@JaredPar:badge要求没有提到任何关于类型推断最大化的内容。刚注意到大声朗读代码很有趣!谢谢但是如果我想得到所有的斑马,我该怎么称呼它呢?如果事先知道类型,我可以执行GetLinkSoftType(),但如果它在变量中呢?我无法执行GetLinksOfType();我会尝试不用施法,使用协方差。另一位用户提出的相关(但有点混乱)问题: