如何在 ItemCollection 中查找具有特定 属性 的项目?

How do I find items with specific property in an ItemCollection?

我有一个包含不同类型 UserControl 的 ItemsCollection,需要查找是否有任何对象满足条件 Any(p => p.GotFocus)。由于 ItemsCollection 未实现 IEnumerable,我可以将集合转换为特定类型,如 Basic LINQ expression for an ItemCollection 中所述:

bool gotFocus = paragraphsItemControl.Items.Cast<ParagraphUserControl>().Any(p => p.GotFocus);

该集合由不同类型的 UserControl 组成(尽管每个都继承自同一父级),因此如果我强制转换为特定类型,则会抛出异常。 如何查询 UserControl 对象的集合?

使用OfType()代替Cast():

bool gotFocus = paragraphsItemControl.Items
     .OfType<ParagraphUserControl>().Any(p => p.GotFocus);

但请注意,这只会检查 ParagraphUserControl 类型的控件。

假设从 ParentParent 继承的所有控件都有 GotFocus 属性 那么要检查所有控件,您可以这样做:

bool gotFocus = paragraphsItemControl.Items
     .Cast<Parent>().Any(p => p.GotFocus);