我正在研究一个项目而且我遇到了问题:( ....我有9个(9个)函数,名称为: getM1(),getM2(),getM3(),getM4().... getM5()。所有这些函数都返回一个值。
现在我需要创建一个循环来检查这些函数的值。像这样:
public void show()
{
for (int i = 1; i <= 9; i++)
{
if (obj.getM[i]() == 1)
{
.......;
}
}
}
当然它会显示一个错误,因为getM不包含任何索引。 我想问你,你能帮帮我吗?或者是否有人有另一个想法如何检查所有getM()函数?
答案 0 :(得分: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)
{
;
}
}
答案 1 :(得分:1)
如何将函数放入数组:
var functionList = new [] { obj.getM1, obj.getM2, ... };
然后循环播放
foreach (var f in functionList)
{
if (f() == 1)
...
}
答案 2 :(得分: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);
}
答案 3 :(得分:1)
创建一个Func<T>
数组,其中T
是函数的返回类型。然后,您可以按照代码中描述的方式或多或少地调用您的函数。
例如,如果您的函数返回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)
{
.......;
}
}
答案 4 :(得分:0)
public void Show()
{
Func<int>[] arr = new[]
{
obj.GetM1,
obj.GetM2,
...
};
foreach(Func<int> func in arr)
{
if (func() == 1)
{
//
}
}
}
答案 5 :(得分:0)
您可以将所有这些方法存储在列表中,循环遍历列表并执行它们。
var funcList = new List<Func<int>>{ getM1, getM2, ... };
然后你可以遍历列表并执行每个方法。
foreach(var func in funList)
{
if(func() == 1)
...
}