我有一个基类列表,如下所示:
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.
所以,如果我呼吁类型这个方法ChildFoo和ChildBar,它应该如果返回true,ChildClasses列表中包含的至少一个实例ChildFoo和ChildBar.
我该如何处理这种情况?
如果ChildClasses列表包含至少一个ChildFoo和ChildBar实例,它应该返回true.
你可以使用OfType和Any.然后,您可以多次组合表达式.
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)
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |