Foreach循环多个动作

时间:2014-02-03 11:52:33

标签: c# for-loop

for (int b = 1; b <= list.count; b++ )
{
    method1
    method2
    method3
    method4
}

我希望能够在for循环上运行多个方法,但是我需要声明在它到达计数时立即中断。目前,b可能是24(列表26),但仍有4种方法可以运行,最终将在28处。我需要在for循环中明显放置一些东西,但不确定是什么。

5 个答案:

答案 0 :(得分:4)

声明方法列表:

List<Action> methods = new List<Action>()
{
    method1, method2, method3, method4
};

然后使用LINQ迭代:

Enumerable.Range(0, list.count)
          .ToList()
          .ForEach(i => (methods[i % methods.Count])());

或者如果您不喜欢LINQ,只需:

for (int i = 0; i < list.count; ++i)
{
    methods[i % methods.Count]();
}

注意:重复if (b <= list.count)是丑陋且无法维护的......

答案 1 :(得分:1)

简单解决方案:D

for (int b = 1; b <= list.count; b++ )
{
    if (b <= list.count) method1();
    if (b <= list.count) method2();
    if (b <= list.count) method3();
    if (b <= list.count) method4();
}

答案 2 :(得分:1)

如果在for循环中递增b,则检查并中断循环。喜欢:

if (b >= list.count) break;

答案 3 :(得分:1)

此示例上查看调用方法动态。
在循环中只需要一个方法调用,并且可以通过这种方式定义从循环调用任何方法的整个数量。 (此示例可作为新的控制台应用程序运行):

class Program
{
    static void Main(string[] args)
    {
        int numberOfMethodCalls = 5;
        string[] charList = new string[] { "A", "B", "C" };

        Console.WriteLine("Static calls --------------");
        for(int b = 0; b < numberOfMethodCalls; b++)
        {
            typeof(Program).GetMethod("Method" + (b%3).ToString()).Invoke(null, new object[] { b }); // call static method
        }

        Console.WriteLine("Calls for object ----------");
        Program p = new Program();
        for(int b = 0; b < numberOfMethodCalls; b++)
        {
            CallMethod(p.GetType().ToString(), "Method" + charList[b%3], b);
        }

        Console.ReadLine();
    }

    public static void CallMethod(string typeName, string methodName, int param)
    {
        Type type = Type.GetType(typeName);
        object instance = Activator.CreateInstance(type);
        MethodInfo methodInfo = type.GetMethod(methodName);
        methodInfo.Invoke(instance, new object[] { param });
    }

    public static void Method0(int num) { Console.WriteLine("1: STATIC b=" + num.ToString()); }
    public static void Method1(int num) { Console.WriteLine("2: STATIC b=" + num.ToString()); }
    public static void Method2(int num) { Console.WriteLine("3: STATIC b=" + num.ToString()); }

    public void MethodA(int num) { Console.WriteLine("1: b=" + num.ToString()); }
    public void MethodB(int num) { Console.WriteLine("2: b=" + num.ToString()); }
    public void MethodC(int num) { Console.WriteLine("3: b=" + num.ToString()); }
}

通话结束后,每种类型都会获得5个方法 来自控制台的结果:

Static calls -----------------
1: STATIC b=0
2: STATIC b=1
3: STATIC b=2
1: STATIC b=3
2: STATIC b=4
Calls for object -------------
1: b=0
2: b=1
3: b=2
1: b=3
2: b=4

因此,您不需要枚举所有方法,您可以将它们称为动态定义的字符串。

答案 4 :(得分:0)

for (int b = 1; b <= list.count;b++ )
{
   if (b <= list.count) method1();
   b++;
   if (b <= list.count) method2();
   b++;
   if (b <= list.count) method3();
   b++;
   if (b <= list.count) method4();
}