我尝试做某事但我不知道如何打电话/给这个打电话,我在谷歌上找不到任何有用的东西。我有基类
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
,它会抱怨更多。我该怎么办,请指教。
答案 0 :(得分:3)
您可以使用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();
}
答案 1 :(得分:0)
您可以使用“is”关键字检查您需要查找其类型的多个孩子前面的父母类型。类似的东西:
if(child is Child1)返回Child1; 否则返回Child2;