for (int b = 1; b <= list.count; b++ )
{
method1
method2
method3
method4
}
我希望能够在for循环上运行多个方法,但是我需要声明在它到达计数时立即中断。目前,b可能是24(列表26),但仍有4种方法可以运行,最终将在28处。我需要在for循环中明显放置一些东西,但不确定是什么。
答案 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();
}