如何了解for循环期间运行的方法?

时间:2012-05-27 06:07:19

标签: c# loops

我有一个for循环,每次通过我调用相同的方法。我需要找到一种方法来了解前面的等式。我必须在不使用增量值的情况下找到它。例如:

for (int i = 0; i < 101; i++) { 
    checkBox[i].Click += new System.EventHandler(checkBoxMethod); }

不知怎的checkBoxMethod应该在这种情况下获得前一个函数,例如:

checkBox[50].Click

3 个答案:

答案 0 :(得分:1)

在for循环内部,还设置每个复选框的标记。我假设你在这里使用Windows窗体。所以,这是修改后的for循环的样子:

for (int i = 0; i < 101; i++) {
    checkBox[i].Click += new System.EventHandler(checkBoxMethod);
    checkBox[i].Tag = i;
}

然后在您的事件处理程序中,您可以将sender变量强制转换为如下所示的复选框:

void checkBoxMethod (object sender, EventArgs args)
{
    CheckBox box = (CheckBox)sender;
    int number = (int)box.Tag;
}

无论创建该复选框的'i'是什么,都将在变量'number'中检索,您可以根据需要使用它。

答案 1 :(得分:0)

不使用for循环,而是使用递归并将当前计数传递给函数:

void checkBoxMethod (object sender, EventArgs args)
{
    CheckBox box = (CheckBox)sender;
    int number = (int)box.Tag;
    myRecursiveMethod(number);
}

private void myRecursiveMethod(int count)
{
    //do whatever stuff I need to do

    if (!timeToExitTheMethod)
        myRecursiveMethod(count++);
}

您在for循环中没有完全解释您正在做什么 ,并且您的问题没有多大意义(即您提到的CheckBoxes是什么)到?),所以我对我的代码示例不太具体。请注意,您必须为递归方法编写一个退出点(否则它将被调用,直到您获得堆栈溢出)。

如果您只想计算调用函数的次数,请执行以下操作:

public class MyClass
{
    private int _myCounter = 0;

    void checkBoxMethod (object sender, EventArgs args)
    {
        CheckBox box = (CheckBox)sender;

        //do whatever you need to do

        _myCounter++;
    }

}

如果您对您的要求更具体,那么我们可以根据我们的建议更具体。

答案 2 :(得分:0)

您可以使用lambda表达式将所需信息传递给处理程序。

    for (int i = 0; i < n; i++) {
        int number = i;
        buttons[i].Click += (sender, args) => OnButtonClick(sender, args, number);
    }
...
    private void OnButtonClick(object sender, RoutedEventArgs e, int number) {
        MessageBox.Show(number.ToString(CultureInfo.InvariantCulture));
    }