Как найти элементы с определенным свойством в ItemCollection? - PullRequest
1 голос
/ 07 апреля 2019

У меня есть ItemCollection с UserControls разных типов, и мне нужно найти, удовлетворяет ли какой-либо объект условию Any(p => p.GotFocus).Поскольку ItemsCollection не реализует IEnumerable, я мог бы привести коллекцию к определенному типу, как объяснено в Базовом выражении LINQ для ItemCollection , например:

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

Коллекция состоит из разныхтипы UserControls (каждый наследует от одного и того же родителя), поэтому возникает исключение, если я приведу к определенному типу.Как я могу запросить коллекцию объектов UserControl?

1 Ответ

1 голос
/ 07 апреля 2019

используйте 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);
...