Ori*_*ish 2 c# parameters function
我有一个奇怪的问题,我先向你展示我的代码,然后我会问这个问题.
我有这个开关功能:
switch(index)
{
case 1:
Level1();
break;
case 2:
Level2();
break;
case 3:
Level3();
break;
case 4:
Level4();
break;
case 5:
Level5();
break;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,每个索引都调用一个名为"Level"和索引号的函数.
我可以将所有这些代码放在一行中,例如"Level + index()"是否可能?
Jon*_*eet 10
不是那样的,没有.你可以使用代表:
// Ideally make this a readonly field.
Action[] actions = { Level1, Level2, Level3, Level4, Level5 };
...
actions[index - 1]();
Run Code Online (Sandbox Code Playgroud)
或者你可以像其他人提到的那样使用反射......但是如果可能的话,我会尽量避免使用反射,特别是如果性能是一个问题.
它确实感觉像一个奇怪的设计 - 我退后一步,考虑是否有一个更简洁的设计方式开始.(目前我们很难在没有更多背景的情况下帮助解决这个问题.)
试试这个:
typeof(yourClassCOntainingLevel1Method).GetMethod("Level"+index).Invoke(this,null);
Run Code Online (Sandbox Code Playgroud)
yourClassCOntainingLevel1Method是一个具有Level1方法的类名
如果它与调用相同的类:
typeof(this).GetMethod("Level"+index).Invoke(this,null);
Run Code Online (Sandbox Code Playgroud)