如何在 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
类型的控件。
假设从 Parent
和 Parent
继承的所有控件都有 GotFocus
属性 那么要检查所有控件,您可以这样做:
bool gotFocus = paragraphsItemControl.Items
.Cast<Parent>().Any(p => p.GotFocus);
我有一个包含不同类型 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
类型的控件。
假设从 Parent
和 Parent
继承的所有控件都有 GotFocus
属性 那么要检查所有控件,您可以这样做:
bool gotFocus = paragraphsItemControl.Items
.Cast<Parent>().Any(p => p.GotFocus);