Конечно:
foreach (CheckBox subset in groupBox_subset.Controls
.Cast<CheckBox>()
.Where(c => c.Checked))
{
...
}
Требуется Cast
, поскольку свойство Controls
реализует только IEnumerable
, а не IEnumerable<T>
, но LINQ в основном работает сильноколлекции.Другими словами, ваш существующий код на самом деле ближе к:
foreach(Object tmp in groupBox_subset.Controls)
{
CheckBox subset = (CheckBox) tmp;
if(subset.Checked) { ... }
}
Если вы хотите игнорировать элементы управления, отличные от CheckBox
, вам нужен OfType
метод вместо Cast
в верхнем фрагменте:
foreach (CheckBox subset in groupBox_subset.Controls
.OfType<CheckBox>()
.Where(c => c.Checked))
{
...
}