在父类列表中返回子类实例的通用方法

时间:2016-06-12 20:49:12

标签: c#

我尝试做某事但我不知道如何打电话/给这个打电话,我在谷歌上找不到任何有用的东西。我有基类

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,它会抱怨更多。我该怎么办,请指教。

2 个答案:

答案 0 :(得分:3)

您可以使用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();
}

答案 1 :(得分:0)

您可以使用“is”关键字检查您需要查找其类型的多个孩子前面的父母类型。类似的东西:

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