Windows Forms 如何用foreach或for循环简化未选中复选框处理代码
原C#代码循环精简实现
原有逐行编写的重复逻辑,可以依托已声明的CheckBox控件数组,通过循环合并Tag赋值、状态判断的重复操作,在完全不改变原有功能的前提下压缩冗余代码。
for循环实现(和原逻辑完全等价)
private void UncheckCheckBox() { CheckBox[] threeCheckBoxes = new [] { checkBox1, checkBox2, checkBox3 }; for (int i = 0; i < threeCheckBoxes.Length; i++) { var currentCheckBox = threeCheckBoxes[i]; // 按原规则赋值对应Tag,和硬编码赋值无差异 currentCheckBox.Tag = $"str{i + 1}"; // 未选中时移除列表对应条目,替代原逐行if判断 if (!currentCheckBox.Checked) { listBox4.Items.Remove(currentCheckBox.Tag); } } }
foreach实现(适合Tag无统一命名规则的场景)
如果不需要依赖字符串拼接生成Tag值,可将控件和对应Tag做并行遍历,逻辑更直观:
private void UncheckCheckBox() { CheckBox[] threeCheckBoxes = new [] { checkBox1, checkBox2, checkBox3 }; string[] tagValues = ["str1", "str2", "str3"]; // 配对遍历控件和对应Tag值 foreach (var (checkBox, tagValue) in threeCheckBoxes.Zip(tagValues, (cb, tag) => (cb, tag))) { checkBox.Tag = tagValue; if (!checkBox.Checked) { listBox4.Items.Remove(checkBox.Tag); } } }
优化说明
- 两类实现的功能和原代码完全一致:三个控件的Tag赋值规则、未选中时从
listBox4移除对应条目的逻辑没有任何行为偏差 - 完全删掉了逐行硬编码赋值、重复if判断的冗余代码
- 后续新增同规则的CheckBox时,只需要把控件加到初始数组、补充对应Tag值即可,无需重复书写赋值、判断逻辑
内容的提问来源于stack exchange,提问作者Mike19
相关产品推荐
相关产品推荐

