我正在尝试做一些事情,但我不知道如何调用/命名,而且我在谷歌上找不到任何有用的东西。我有基本类
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>();
如果您需要一个实例,可以使用First
或FirstOrDefault()
方法。
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;