我有一个具有不同类型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对象的集合?
答案 0 :(得分:1)
使用OfType()
代替Cast()
:
bool gotFocus = paragraphsItemControl.Items
.OfType<ParagraphUserControl>().Any(p => p.GotFocus);
但是请注意,只会选中ParagraphUserControl
类型的控件。
假设从Parent
和Parent
继承的所有控件都具有GotFocus
属性,那么要检查所有控件,您可以执行以下操作:
bool gotFocus = paragraphsItemControl.Items
.Cast<Parent>().Any(p => p.GotFocus);