C # логика для реализации цикла foreach, когда установлен флажок - PullRequest
1 голос
/ 04 августа 2010

В моем приложении для Windows есть флажок «Непрерывный».Когда пользователь проверяет это и нажимает кнопку «Обработать», приложение будет обрабатывать все элементы в списке.Однако, если пользователь не установит этот флажок, он будет обрабатывать только первый в списке.

В моем методе Process я хочу написать условие if для проверки checkBox и выполнения цикла 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;

  }

}

Я реализовал цикл foreach для обработки списка в методе ProcessList ().Есть ли способ избежать выполнения метода LoadList (), если пользователь проверяет непрерывный checkBox?LoadList () заполняет listBox из базы данных.

Ответы [ 3 ]

2 голосов
/ 04 августа 2010

сделать что-то вроде этого

if( chkBox.Checked )
    ProcessList();
else
    ProcessOne();

Напишите функции, чтобы делать то, что вы хотите

обновить

, чтобы избежать дублирования кода обработкиможет сделать что-то вроде

public void ProcessList()
{
    foreach( var item in list )
        ProcessOne( item );
}
2 голосов
/ 04 августа 2010

Факторинг - твой друг.

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; } }

Это будет работать для вас, но мне это не особенно нравится, поскольку я считаю, что Process должен быть частью самой структуры данных списка, а не моего пользовательского интерфейса. Модель (и вид) и элемент управления должны быть отдельными (если это возможно).

1 голос
/ 04 августа 2010
    Boolean doAllItems = chkBox.Checked;
    foreach(Object something in collection)
    {
        DoWork(something);
        if(!doAllItems)
            break;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...