返回父类列表中子类实例的泛型方法



我正在尝试做一些事情,但我不知道如何调用/命名,而且我在谷歌上找不到任何有用的东西。我有基本类

public class Parent{/*some code here*/}

和子类

public class Child1:Parent{/*more code*/}
public class Child2:Parent{/*expended behaviour*/}

如果我创建

List<Parent> children = new List<Parent>();

我可以很高兴地把所有的孩子都放在那个列表中,但我在编写检索它们的通用方法时遇到了困难。类似这样的东西:

public T GetChild<T>()
{
var child = children.Find(c => c.GetType() == typeof(T));
if (child == null)
return default(T);
return child;
}

编译器在最后一行抱怨,若我尝试将child显式转换为T,它会抱怨更多。请告诉我该怎么办。

您可以使用OfType方法来获取特定类的所有实例。children.OfType<T>();如果您需要一个实例,可以使用FirstFirstOrDefault()方法。

public T GetChild<T>() 
{
var child = children.OfType<T>().FirstOrDefault();
if (child == null)
return default(T);
return child;
}

或者只是

public T GetChild<T>() 
{
return children.OfType<T>().FirstOrDefault();
}

您可以在需要使用"is"关键字查找其类型的多个子对象前面检查父对象的类型。类似于:

if(child为Child1)返回Child1;否则返回Child2;

最新更新