ForEach中的C#条件表示至少有一个项目已被处理

时间:2018-05-22 12:41:09

标签: c#

我一次又一次地发现自己需要遍历列表/集合来单独处理每个项目以及检查是否至少有一个项目已被处理。例如,如果我有一个“创建用户”方法来查看需要将哪些“用户角色”添加到用户(通过勾选一些复选框),我会看到类似的内容:

                foreach (CheckBox in CheckBoxRepeater)

                {
                    if (CheckBox.Checked)
                    {
                        userRoles.Add(SomeUserRole);
                        foundOne = true;
                    }
                }

                if (foundOne)
                {
                    //Do something else
                }

我的问题是:foreach和if语句能否以某种方式结合起来?或者最好使用bool(在上面的示例中='foundOne')来跟踪项目是否已被处理?

谢谢!

5 个答案:

答案 0 :(得分:2)

您可以尝试使用 Linq ,前提是userRolesList<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
    }