C# 带条件的foreach循环
有没有一种方法可以在一个语句中执行以下操作C# 带条件的foreach循环,c#,foreach,C#,Foreach,有没有一种方法可以在一个语句中执行以下操作 foreach(CheckBox subset in groupBox_subset.Controls) if(subset.Checked) { ... } 是的,有: foreach(CheckBox subset in groupBox_subset.Controls.Cast<CheckBox>() .Where(x =&
foreach(CheckBox subset in groupBox_subset.Controls)
if(subset.Checked) { ... }
是的,有:
foreach(CheckBox subset in groupBox_subset.Controls.Cast<CheckBox>()
.Where(x => x.Checked))
foreach(groupBox\u subset.Controls.Cast()中的复选框子集)
.其中(x=>x.Checked))
但是,这仅在控件
中的所有项都属于复选框
类型时有效。如果控件
中至少有一项不是复选框
,这将引发异常。但您的代码也是如此。当然:
foreach (CheckBox subset in groupBox_subset.Controls
.Cast<CheckBox>()
.Where(c => c.Checked))
{
...
}
如果希望能够忽略非复选框
控件,则希望在顶部代码段中使用该方法而不是Cast
:
foreach (CheckBox subset in groupBox_subset.Controls
.OfType<CheckBox>()
.Where(c => c.Checked))
{
...
}
foreach(groupBox\u subset.Controls中的复选框子集)
第()类
.其中(c=>c.Checked))
{
...
}
您可以使用LINQ选择符合此要求的元素:
var controls = groupBox_subset.Controls.OfType<CheckBox>().Where(x => x.Checked);
var controls=groupBox\u subset.controls.OfType()。其中(x=>x.Checked);
你知道,你总是离表达你意图的所需语法有一个(或多个)抽象层次:
foreach(CheckBox checkedBox in groupBox_subset.CheckedBoxes()) { ... }
其中,
复选框
扩展方法可以通过查看其他答案来实现。让这些简单问题在1秒内有6个以上的答案,那么我们只处理异常?还是有更干净的选择?@Shankar:看看我的答案。这取决于您想要什么-有时您确实想要异常,因为它表明某些内容与您期望的不一样。如果您确定该控件集合中只有复选框
es,则无需处理。如果出现异常,您就知道出了问题。原始代码表明他是肯定的。然而,如果您不确定,
类型的将是Cast
的更好选择,如Darin首先展示的,随后由Jon解释。
foreach(CheckBox checkedBox in groupBox_subset.CheckedBoxes()) { ... }