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

C# C方法,可以执行循环中的任何代码,c#,.net-4.0,C#,.net 4.0,例如,如果我必须多次键入类似的内容,是否有任何方法将此循环放入具有LoopMethodCode lines、int count等参数的方法中 这里有一个变体: public static LoopMethod(int iterations, Action<int> body) { for (int i = 0; i < iterations; i++) body(i); } 好的,你可以很容易地与代表一起完成: public static void L

例如,如果我必须多次键入类似的内容,是否有任何方法将此循环放入具有LoopMethodCode lines、int count等参数的方法中

这里有一个变体:

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

好的,你可以很容易地与代表一起完成:

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);
}
您可以以任何方式更改它,甚至可以将其更改为以当前循环计数器作为参数的操作。参见@Gabe的答案了解行动变量:


当然,我想知道为什么要复制这样一个明显内置的构造,比如循环?

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

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

它将从0迭代到999,使用1001作为inclusive的第二个参数。附加的好处是,这可以用于任何可枚举类型。

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

LoopMethod(100, i =>
{
    code line;
    code line;
});
LoopMethod(() => {code line 1; code line 2;}, 100);
方法声明类似于

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

这里可能有一些奇怪的语法错误,我还没有测试过,但这种方法应该有效。

委托、函数、操作。你能提供一些关于Func,Action的例子吗?如果你熟悉lambda函数,我建议你浏览LINQBridge的源代码。作为入门:不客气。如果您对LINQ中使用的语法类型不熟悉,请尝试在某些项目中大量使用它,并对过程保持耐心-这是一种不同的思维方式,可能需要一点时间才能理解,但实践是关键。至少,这就是我最终能够将其内在化的原因。YMMV
        Enumerable.Range(0, 1000).ForEach(i =>
                                              {
                                                  Console.WriteLine(i);
                                              });
LoopMethod(() => {code line 1; code line 2;}, 100);
void LoopMethod (Action code, int count) {
     for (int i = 0; i < count; i++) {
         code();
     }
}