如何了解哪个方法在 for 循环期间运行

本文关键字:for 循环 运行 方法 何了解 了解 | 更新日期: 2023-09-27 18:35:23

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

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

在这种情况下,checkBoxMethod应该以某种方式获取以前的函数,例如:

checkBox[50].Click

如何了解哪个方法在 for 循环期间运行

在 for 循环中,还要设置每个复选框的标签。我假设您在这里使用的是Windows窗体。因此,修改后的 for 循环如下所示:

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

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

void checkBoxMethod (object sender, EventArgs args)
{
    CheckBox box = (CheckBox)sender;
    int number = (int)box.Tag;
}
无论创建该

复选框的事件处理程序时"i"是什么,都将在变量"number"中检索,您可以根据需要使用它。

不要使用

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循环中到底在做什么,并且您的问题没有多大意义(即您暗示的复选框是什么?),所以我不能非常具体地介绍我的代码示例。请注意,您必须为递归方法编写一个退出点(否则将调用它,直到您出现堆栈溢出)。

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

public class MyClass
{
    private int _myCounter = 0;
    void checkBoxMethod (object sender, EventArgs args)
    {
        CheckBox box = (CheckBox)sender;
        //do whatever you need to do
        _myCounter++;
    }
}

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

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

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