繁体   English   中英

在其基类列表中查找派生类

[英]Find a derived class in a list of its base class

所以我有一个BaseClass列表,我已经填充了几个派生类的实例(每个派生类只有一个),所以我们有类似的东西:

List<BaseClass> myList = new List<BaseClass>();

myList.Add(new DerivedClassA());
myList.Add(new DerivedClassB());
myList.Add(new DerivedClassC());

现在我希望能够使用以下内容搜索myList:

public void FindClass (BaseClass class){ //class is a derived class
   //find index or object of type class
   //so that if class is a DerivedClassB
   //we return the first DerivedClassB in myList 
}

这可能吗? 我知道我可以为每个DerivedClass提供一个名称属性,并通过它的名称找到它,但我不想这样做。

如果传入DerivedClassB的实例, DerivedClassB可以通过比较传入的实例的实际类型和列表中的实例来查找DerivedClassB的所有实例:

public IEnumerable<BaseClass> FindClass (BaseClass @class){ 
    return myList.Where(c => c.GetType() == @class.GetType());
}

另一种解决方案是使用'OfType <>'来过滤列表

public class Base { }

public class DerivedA : Base { }
public class DerivedB : Base { }

List<Base> instances = new List<Base>();
instances.Add(new DerivedA());
instances.Add(new DerivedB());

 var results = instances.OfType<DerivedA>().FirstOrDefault();

编辑 - 这是一种创建搜索方法的方法

T Find<T>() where T : Base {
    return _Instances.OfType<T>().FirstOrDefault();
}

您可以使用is运算符执行此操作。 它告诉您对象是否属于给定类型。 添加一点LINQ,你会得到:

var firstB = myList
        .Where(c => c is DerivedClassB)
        .First();

暂无
暂无

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

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