У меня есть панель с контролами, у некоторых Dock = DockStyle.Top, у некоторых Bottom. Через
Form1.pageWithMessages.Controls.OfType<UserControl4> ().Select (x => x.Dock == DockStyle.Top).Count ();
Пытаюсь подсчитать количество контролов с DockStyle.Top, но почему-то Select возвращает все контролы, даже те, которые не надо. В чём может быть проблема? Заранее спасибо за ответ!
P.S. Я проверял, в панеле есть контролы с DockStyle.Bottom.
Вы не правильно пользуетесь LINQ, Select() нужен тогда, когда надо изменить представление элементов. Он вычисляет выражение для каждого элемента. Результатом выполнения вашего запроса, если убрать Count()
Form1.pageWithMessages
.Controls
.OfType<UserControl4>()
.Select(x => x.Dock == DockStyle.Top);
будет набор элементов типа DockStyle со значением DockStyle.Top, а количество их будет совпадать с количеством всех контролов типа UserControl4.
Чтобы отфильтровать элементы используется другой метод - Where(). Но так как вам нужно лишь количество элементов, правильный вариант перенести условие в Count() -- он также поддерживает условия(предикаты) как аргумент.
Form1.pageWithMessages
.Controls
.OfType<UserControl4>()
.Count(x => x.Dock == DockStyle.Top);
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости