所以我有一个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提供一个名称属性,并通过它的名称找到它,但我不想这样做。
答案 0 :(得分:2)
如果传入DerivedClassB
的实例,则可以通过比较传入的实例的实际类型和列表中的实例来查找DerivedClassB
的所有实例:
public IEnumerable<BaseClass> FindClass (BaseClass @class){
return myList.Where(c => c.GetType() == @class.GetType());
}
答案 1 :(得分:2)
另一种解决方案是使用&#39; OfType&lt;&gt;&#39;过滤列表
$ pip install pillow --upgrade
编辑 - 这是一种创建搜索方法的方法
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();
答案 2 :(得分:0)
您可以使用is
运算符执行此操作。它告诉您对象是否属于给定类型。添加一点LINQ,你得到:
var firstB = myList
.Where(c => c is DerivedClassB)
.First();