繁体   English   中英

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

[英]Generic method to return instance of child class in List of parent classes

我正在尝试做某事,但我不知道该如何称呼/命名,也找不到在Google上有用的东西。 我有基础课

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM