Как определить цикл while в функции и вызвать его несколько раз в C #? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть while цикл

string path = "";
int ctr = 0, i = 0;
while (i < lvwArticles.Items.Count)
{
    ListViewItem lvi = lvwArticles.Items[i];
    if (lvi.SubItems[2].Text != path)
    {
        path = lvi.SubItems[2].Text;
        ctr = 0;
        skipme = false;
    }
    if (!skipme)
    {
        ctr++;

        lvi.EnsureVisible();
        lvi.Checked = true;
    }
        //Process
    i++;
}

private void function1()
{
    while()
    {
        //Process
    }
}

private void function2()
{
    while()
    {
        //Process
    }
}

private void function3()
{
    while()
    {
        //Process
    }
}

private void function4()
{
    while()
    {
        //Process
    }
}

private void function5()
{
    while()
    {
        //Process
    }
}

У меня есть 5 functions в моей программе, который нуждается в этом while цикле.Итак, есть ли способ, которым я могу объявить этот цикл while в отдельной функции и вызывать его по мере необходимости?

//Process является переменной.Итак, у меня есть несколько разных действий в разных функциях, но все они должны быть выполнены в одном цикле while.

Ответы [ 2 ]

3 голосов
/ 07 мая 2019

// Процесс является переменным.Итак, у меня есть несколько разных действий в разных функциях, но все они должны быть выполнены в одном и том же цикле while.

Да, вы можете.Он называется Action:

public void YourFunction(Action action)
{
    string path = "";
    int ctr = 0, i = 0;
    while (i < lvwArticles.Items.Count)
    {
        ListViewItem lvi = lvwArticles.Items[i];
        if (lvi.SubItems[2].Text != path)
        {
            path = lvi.SubItems[2].Text;
            ctr = 0;
            skipme = false;
        }
        if (!skipme)
        {
            ctr++;

            lvi.EnsureVisible();
            lvi.Checked = true;
        }

        //Process
        action();

        i++;
    }
}

Теперь вы можете передать процесс, который хотите выполнить в данный момент:

YourFunction(() => MessageBox.Show("Hello"));
1 голос
/ 07 мая 2019

У меня в программе 5 функций, которым нужен цикл while. Итак, есть ли способ, которым я могу объявить этот цикл while в отдельной функции и вызывать его по мере необходимости?

Это для демонстрации рекурсивного поведения, о котором я спрашивал в комментариях:

private void LoadTree(ListView lstViewChild)
{
string path = "";
int ctr = 0, i = 0;
while (i < lstViewChild.Count)
{
    ListViewItem lvi = lstViewChild.Items[i];
    if (lvi.SubItems[2].Text != path)
    {
        path = lvi.SubItems[2].Text;
        ctr = 0;
        skipme = false;

        //I think its here where you want to recursively call it
        LoadTree(lvi);  //<-- here we call this method again, be careful as each time you call it, it add to the call stack and when you exhaust that it results in a STACKOVERFLOW exception!
    }
    if (!skipme)
    {
        ctr++;

        lvi.EnsureVisible();
        lvi.Checked = true;
    }
        //Process



    i++;
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...