选中复选框时实现foreach循环的C#逻辑

选中复选框时实现foreach循环的C#逻辑,c#,foreach,C#,Foreach,我的Windows应用程序中有一个名为“Continuous”的复选框。当用户选中此项并单击“处理”按钮时,应用程序将处理列表框中的所有项目。但是,如果用户不选中此框,它将只处理列表中的第一个 在我的Process方法中,我想编写一个if条件来选中复选框并执行foreach循环,否则只执行第一项 这是我的密码 private void btnProcess_Clicl() { bool bDone = false; while(!bDone) { LoadList();

我的Windows应用程序中有一个名为“Continuous”的复选框。当用户选中此项并单击“处理”按钮时,应用程序将处理列表框中的所有项目。但是,如果用户不选中此框,它将只处理列表中的第一个

在我的Process方法中,我想编写一个if条件来选中复选框并执行foreach循环,否则只执行第一项

这是我的密码

private void btnProcess_Clicl()
{

  bool bDone = false;

  while(!bDone)
  {

    LoadList(); //This will load the list from database into listBox

    if(listBox.items.Count > 0)
    {
      ProcessList();
    }

    if(!chkBox.Checked)
      bDone = true;

  }

}
我已经在ProcessList()方法中实现了foreach循环来处理列表。如果用户选中continuous复选框,是否仍然可以避免执行LoadList()方法?LoadList()将从数据库填充列表框。

执行类似操作

    Boolean doAllItems = chkBox.Checked;
    foreach(Object something in collection)
    {
        DoWork(something);
        if(!doAllItems)
            break;
    }
if( chkBox.Checked )
    ProcessList();
else
    ProcessOne();
编写函数来执行您想要的操作

更新

为了避免重复处理代码,可以执行以下操作

public void ProcessList()
{
    foreach( var item in list )
        ProcessOne( item );
}
做这样的事

if( chkBox.Checked )
    ProcessList();
else
    ProcessOne();
编写函数来执行您想要的操作

更新

为了避免重复处理代码,可以执行以下操作

public void ProcessList()
{
    foreach( var item in list )
        ProcessOne( item );
}

保理是你的朋友

void ProcessList(int start, int count) {
    for (int i=start; i < start + count; i++) {
        ProcessItem(i);
    }
}

void ProcessItem(int i) { // your code here
}

private void btnProcess_Click() {
   if (IsContinuous) {
      ProcessList(0, list.Count);
   }
   else {
       ProcessItem(0);
   }
}

private bool IsContinuous { get { return chkBox.Checked; } }
void进程列表(int开始,int计数){
对于(int i=start;i

这将对您有用,但我并不特别喜欢它,因为我认为流程本身应该是列表数据结构的一部分,而不是我的UI。模型(和视图)和控件应该分开(如果可能)。

分解是你的朋友

void ProcessList(int start, int count) {
    for (int i=start; i < start + count; i++) {
        ProcessItem(i);
    }
}

void ProcessItem(int i) { // your code here
}

private void btnProcess_Click() {
   if (IsContinuous) {
      ProcessList(0, list.Count);
   }
   else {
       ProcessItem(0);
   }
}

private bool IsContinuous { get { return chkBox.Checked; } }
void进程列表(int开始,int计数){
对于(int i=start;i

这将对您有用,但我并不特别喜欢它,因为我认为流程本身应该是列表数据结构的一部分,而不是我的UI。模型(和视图)和控件应该分开(如果可能)。

问题是,如果选中复选框,您只想尝试
ProcessList()
一次,还是不选中复选框,您想避免从数据库加载整个列表?小心。。。听起来你想修改正在循环的列表。不能在foreach循环中执行此操作。为什么if(!chkBox.Checked)位于底部?我真的不知道你在问什么,恐怕没有进一步的解释,我猜你应该在做任何事情之前检查这个框是否被选中。Dan-我只想执行ProcessList()一次,在执行一次之后,我会检查用户是否单击了continuous。取决于我是否退出while循环。问题是,如果选中复选框,您只想尝试
ProcessList()
一次,还是不选中复选框,您想避免从数据库加载整个列表?请小心。。。听起来你想修改正在循环的列表。不能在foreach循环中执行此操作。为什么if(!chkBox.Checked)位于底部?我真的不知道你在问什么,恐怕没有进一步的解释,我猜你应该在做任何事情之前检查这个框是否被选中。Dan-我只想执行ProcessList()一次,在执行一次之后,我会检查用户是否单击了continuous。根据这一点,我将退出while循环。因此,这类似于在ProcessList()和ProcessOne()方法中编写两次代码。对吧?我认为这是有道理的。我在想一种不写两次代码的方法,但我认为没有其他方法可以通过查看答案来实现。谢谢。@shanthiram您不必重复代码。请参阅更新传入…这就像在ProcessList()和ProcessOne()方法中编写两次代码一样。对吧?我认为这是有道理的。我在想一种不写两次代码的方法,但我认为没有其他方法可以通过查看答案来实现。谢谢。@shanthiram您不必重复代码。请参阅更新传入。。。