2

我正在做一个项目,但我被卡住了:(....我有 9(九)个函数,名称为:getM1()、getM2()、getM3()、getM4()....getM5( ). 所有这些函数都返回一个值。

现在我需要创建一个循环来检查这些函数的值。像这样的东西:

public void show()
{
    for (int i = 1; i <= 9; i++)
    {
        if (obj.getM[i]() == 1)
        {
          .......;
        }
    }
}

当然它向我显示了一个错误,因为 getM 不包含任何索引。我想问你,你能帮我解决这个问题吗?或者有人有其他想法我如何检查所有 getM() 函数?

4

6 回答 6

3

创建一个委托数组Func<int>并使用它来访问您的方法:

var functions = new Func<int>[9];
functions[0] = getM1;
functions[1] = getM2;
functions[2] = getM3;
// (...)

for (int i = 0; i <= 9; i++)
{
    if (functions[i]() == 1)
    {
        ;
    }
}
于 2013-04-09T17:47:49.240 回答
1

将函数放入数组怎么样:

var functionList = new [] { obj.getM1, obj.getM2, ... };

然后循环它

foreach (var f in functionList)
{
    if (f() == 1) 
    ...
}
于 2013-04-09T17:48:37.650 回答
1

用这个替换方法:

int getM(int index)

如果这个和其他建议的解决方案真的没有任何意义,你可以使用反射做你想做的事:

var t = obj.GetType();
for (int i = 1; i <= 9; i++)
{
    var m = t.GetMethod("getM" + i);
    int result = (int)m.Invoke(obj, null);
}
于 2013-04-09T17:48:49.993 回答
1

制作一个数组Func<T>,其中T是函数的返回类型。然后,您将能够或多或少地按照您在代码中描述的方式调用您的函数。

例如,如果你的函数 return int,你可以这样做:

Func<int>[] ems = new Func<int>[] {
    () => obj.getM1(), () => obj.getM2(), () => obj.getM3()
,   () => obj.getM4(), () => obj.getM5(), () => obj.getM6()
,   () => obj.getM7(), () => obj.getM8(), () => obj.getM9()
};
foreach (Func<int> em in ems)
{
    if (em() == 1)
    {
      .......;
    }
}
于 2013-04-09T17:48:58.557 回答
0
public void Show()
{
   Func<int>[] arr = new[]
   {
       obj.GetM1,
       obj.GetM2,
       ...
   };
   foreach(Func<int> func in arr)
   {
       if (func() == 1)
       {
           //
       }
   }
}
于 2013-04-09T17:46:10.563 回答
0

您可以将所有这些方法存储在一个列表中,遍历列表并执行它们。

var funcList = new List<Func<int>>{ getM1, getM2, ... };

然后您可以遍历列表并执行每个方法。

foreach(var func in funList)
{
    if(func() == 1)
        ...
}
于 2013-04-09T17:49:44.553 回答