我可以把所有这些代码放在一行中吗,比如“Level + index()”可以吗?
我有这个开关功能:
switch(index)
{
case 1:
Level1();
break;
case 2:
Level2();
break;
case 3:
Level3();
break;
case 4:
Level4();
break;
case 5:
Level5();
break;
}
如您所见,每个索引调用一个名为“Level”和索引编号的函数。
最佳答案
不是那样的,不。您可以使用委托(delegate):
// Ideally make this a readonly field.
Action[] actions = { Level1, Level2, Level3, Level4, Level5 };
...
actions[index - 1]();
或者您可以使用反射,正如其他人提到的那样...但我会尽可能避免这种情况,尤其是在性能受到关注的情况下。
虽然它确实感觉像是一个奇怪的设计 - 我会退后一步并考虑是否有一种更简洁的设计方法来开始。 (目前我们很难在没有更多上下文的情况下提供帮助。)
关于c# - 使用名称中的参数调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19159247/