如何检查基类型列表是否至少包含一些子类型的实例

S. *_*tin 0 c#

我有一个基类列表,如下所示:

List<BaseClass> ChildClasses
Run Code Online (Sandbox Code Playgroud)

我有这样的子课:

class ChildFoo : BaseClass {}
class ChildBar : BaseClass {}
class ChildBaz : BaseClass {}
class ChildQax : BaseClass {}
class ChildBox : BaseClass {}
...
Run Code Online (Sandbox Code Playgroud)

我需要实现一个方法,它可以查询ChildClasses列表,看看它是否包含我传递给它的所有类型,这些类型都是从中派生出来的BaseClass.

所以,如果我呼吁类型这个方法ChildFooChildBar,它应该如果返回true,ChildClasses列表中包含的至少一个实例ChildFooChildBar.

我该如何处理这种情况?

Igo*_*gor 5

如果ChildClasses列表包含至少一个ChildFoo和ChildBar实例,它应该返回true.

你可以使用OfTypeAny.然后,您可以多次组合表达式.

var containsFooAndBar = ChildClasses.OfType<ChildFoo>().Any() 
                     && ChildClasses.OfType<ChildBar>().Any();
Run Code Online (Sandbox Code Playgroud)

备用

你也可以从另一个方向接近它.创建需要包含的所有必需类型的列表,然后使用ChildClasses列表作为输入在该列表上执行查询.这只是编写上述内容的另一种方式,该ChildClasses集合仍然迭代2次.

Type[] mandatoryTypes = new Type[] {typeof(ChildFoo), typeof(ChildBar)};
var containsFooAndBar = mandatoryTypes.All(mandatoryType => ChildClasses.Any(instance => instance != null && mandatoryType == instance.GetType()));
Run Code Online (Sandbox Code Playgroud)