C#方法可以执行循环中的任何代码

时间:2010-10-26 02:16:24

标签: c# .net-4.0

例如,如果我必须多次输入类似的内容,有没有办法将此循环放在方法中,使用LoopMethod(Code lines, int count)等参数

        for (int i = 0; i <= 1000; i++)
        {
            code line 1;
            code line 2;
            ...
            code line N;
        }

        for (int i = 0; i <= 1000; i++)
        {
            code line 1;
            code line 2;
            ...
            code line N;
        }

如果结果有类似的东西。

LoopMethod{
            code line 1,
            code line 2,
            ...
            code line N,
            1000
}

4 个答案:

答案 0 :(得分:3)

这是一个变体:

public static LoopMethod(int iterations, Action<int> body)
{
    for (int i = 0; i < iterations; i++)
        body(i);
}

你会这样称呼它:

LoopMethod(100, i =>
{
    code line;
    code line;
});

答案 1 :(得分:2)

更通用的形式是首先创建一个扩展方法:

public static class Extension
{
    public static void ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)
    {
        foreach(var currentItem in enumerable)
        {
            action(currentItem);
        }
    }
}

然后使用它可以执行以下操作:

        Enumerable.Range(0, 1000).ForEach(i =>
                                              {
                                                  Console.WriteLine(i);
                                              });

哪个会从0迭代到999(使用1001作为包含的第二个参数)。额外的好处是,这适用于任何可枚举的类型。

答案 2 :(得分:0)

嗯,你可以很容易地与代表们这样做:

public static void LoopMethod(Action loopCode, int count)
{
    for (int i = 0; i < count ; ++i) loopCode();
}

public static void Main()
{
    LoopMethod(() => {
        code line 1;
        code line 2;
        code line 3;
    }, 100);
}

你可以改变你想要的任何方式,甚至可以改为Action<int>,它将当前循环计数器作为参数。请参阅@ Gabe对Action<int>变体的回答:)

当然,我不得不想知道你为什么要重现像循环那样明显的内置结构?

答案 3 :(得分:0)

您可以像这样使用lambda表达式:

LoopMethod(() => {code line 1; code line 2;}, 100);

方法声明看起来像

void LoopMethod (Action code, int count) {
     for (int i = 0; i < count; i++) {
         code();
     }
}

那里可能存在奇怪的语法错误(我没有测试过),但这种方法应该有效。