我一次又一次地发现自己需要遍历列表/集合来单独处理每个项目以及检查是否至少有一个项目已被处理。例如,如果我有一个“创建用户”方法来查看需要将哪些“用户角色”添加到用户(通过勾选一些复选框),我会看到类似的内容:
foreach (CheckBox in CheckBoxRepeater)
{
if (CheckBox.Checked)
{
userRoles.Add(SomeUserRole);
foundOne = true;
}
}
if (foundOne)
{
//Do something else
}
我的问题是:foreach和if语句能否以某种方式结合起来?或者最好使用bool(在上面的示例中='foundOne')来跟踪项目是否已被处理?
谢谢!
答案 0 :(得分:2)
您可以尝试使用 Linq ,前提是userRoles
是List<T>
:
// Data to work with - filtered items
var data = CheckBoxRepeater
.Where(checkBox => checkBox.Checked);
// Add all the items into a List<T> - userRoles
userRoles.AddRange(data);
// Do we have any items filtered?
if (data.Any())
{
...
}
答案 1 :(得分:2)
我会使用Any()
bool foundOne = CheckBoxRepeater.Any(x => x.Checked);
if(foundOne)
{
userRoles.Add(SomeUserRole);
//do some stuff
}
答案 2 :(得分:0)
为什么要遍历并检查条件以及为什么不处理复选框Checked
事件,这实际上取决于您在ASP.NET,Winform,WPF或其他任何方面的工作并执行您的操作那里。
BTW,您的第二个子条件if (foundOne)
无关紧要,因为您可以在if (CheckBox.Checked)
内部执行逻辑
答案 3 :(得分:0)
您可以使用活动。
因此每个复选框都有一个CheckedChanged事件的监听器,写一个OnCheckedChanged回调并让这个回调向列表中添加一个元素。 foundOne是一个getter,当此列表具有Count&gt;时返回true。 0
答案 4 :(得分:0)
假设在foreach循环之前userRoles
为空:
userRoles.AddRange(CheckBoxRepeater.Where(x => x.Checked));
if (userRoles.Count > 0)
{
//Do something else
}