Is there a way to do the following in one statement?
foreach(CheckBox subset in groupBox_subset.Controls)
if(subset.Checked) { ... }
Sure:
foreach (CheckBox subset in groupBox_subset.Controls
.Cast<CheckBox>()
.Where(c => c.Checked))
{
...
}
The Cast call is required because the Controls property only implements IEnumerable, not IEnumerable<T>, but LINQ basically works on strongly-typed collections. In other words, your existing code is actually closer to:
foreach(Object tmp in groupBox_subset.Controls)
{
CheckBox subset = (CheckBox) tmp;
if(subset.Checked) { ... }
}
If you want to be able to ignore non-CheckBox controls, you want the OfType method instead of Cast in the top snippet:
foreach (CheckBox subset in groupBox_subset.Controls
.OfType<CheckBox>()
.Where(c => c.Checked))
{
...
}
Yes, there is:
foreach(CheckBox subset in groupBox_subset.Controls.Cast<CheckBox>()
.Where(x => x.Checked))
However, this only works if all items in Controls are of type CheckBox. If there is at least one item in Controls that is not a CheckBox, this will throw an exception. But so does your code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With