IEnumerable
является интерфейсом. Когда тип реализует IEnumerable
, выдает перечислитель, который может использоваться для итерации через элементы типов.
Например, массив реализует этот интерфейс. Следовательно, вы можете обходить это предметы, используя foreach
заявление:
foreach(var item in array)
{
// ...
}
Этот метод, GetAll
возвращает последовательность Control
объектов. Это может быть массив из Control
объектов, список Control
объектов или любого типа, который реализует IEnumerable<Control>
. Этот метод получает в качестве параметров два объекта: один из Control
, а другой тип Type
. Затем в переменной с именем controls
вы храните коллекцию элементов управления, содержащихся в элементе управления. Для получения дополнительной информации об этом, пожалуйста, посмотрите here. После этого здесь:
return controls.SelectMany(ctrl => GetAll(ctrl,type))
.Concat(controls)
.Where(c => c.GetType() == type);
управление Еогеаспом в контрольной группе вы получите это содержащиеся элементы управления одновременно рекурсивно. И затем вы присоединяетесь к двум последовательностям с помощью controls
, и вы возвращаете их.
В нескольких словах, если вы передадите туда элемент управления, тип которого является кнопкой, тогда метод GetAll
вернет вам последовательность всех кнопок, которые содержатся в одной и той же панели.
Это возвращает только первый уровень глубоко, в то время как его код извлекает все элементы управления. –
@RobertMcKee Да, вы правы – Ormoz