DEN*_*DEN 2 c# switch-statement
我必须在不同的功能中重复使用相同的开关盒.在不同的功能中,开关盒的定义会有所不同.例如:
int groupID = somenumber;
private void FunctionA()
{
switch (groupID)
{
case 0:
// Do Action A
break;
case 1:
// Do Action B
break;
case 2:
// Do Action C
break;
}
}
private void FunctionB()
{
switch (groupID)
{
case 0:
// Do Action Z
break;
case 1:
// Do Action X
break;
case 2:
// Do Action Y
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一次使用相同开关盒的任何方法但定义可能不同吗?
我真诚地相信有更好的方法来做你想要完成的事情,但你需要给我们更多的细节.
在目前的情况下,一种可能的解决方案是:
private void SwitchStuff(Action action0, Action action1, Action action2)
{
switch (groupID)
{
case 0:
action0();
break;
case 1:
action1();
break;
case 2:
action2();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
并使用它像:
SwitchStuff(DoActionA, DoActionB, DoActionC);
SwitchStuff(DoActionX, DoActionY, DoActionZ);
Run Code Online (Sandbox Code Playgroud)
这些行为是lambda/normal方法.
一种可能性是使用一个使用Action委托的方法,如下所示:
private void MyFunction(int groupID, Action a, Action b, Action c)
{
switch (groupID)
{
case 0:
a();
break;
case 1:
b();
break;
case 2:
c();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样调用它:
MyFunction( groupId, A, B, C );
Run Code Online (Sandbox Code Playgroud)
要么
MyFunction( groupId, Z, X, Y );
Run Code Online (Sandbox Code Playgroud)
编辑
或者更好的方法是Matthew Watson建议的变体:
将方法更改为
private void MyFunction(int groupID, params Action[] actions)
{
actions[groupId]();
}
Run Code Online (Sandbox Code Playgroud)
并摆脱整个开关盒.你用与上面完全相同的方式调用它.
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |