【发布时间】:2017-03-11 19:50:08
【问题描述】:
我想知道这种 switch-case 用法是否合适,或者还有其他替代方案(模式)吗?
以下是我的程序的一部分:
基础是我正在执行一系列操作
一般程序控制都是按照case的顺序一个一个的;
通常任何特定情况在第一次调用时都没有完成,我们必须等到 procX
returnstrue。 (等待仪器响应或动作完成);可以跳转到特定的
case(更改采样代码中的StepCurrent)。
我发现这种switch-case 很难维护,尤其是通过将StepCurrent 更改为直接控制流。而且代码看起来很丑。
有没有更好的方法?
注意:虽然我使用的是 C#,但问题可能不限于它。
while (true)
{
if (sig_IsExit())
{
break;
}
Thread.Sleep(500);
bRetSts = false;
switch (StepCurrent) // nSeq)
{
case 0:
bRetSts = proc0();
break;
case 1:
bRetSts = proc1();
break;
case 2:
bRetSts = proc2();
break;
case 3:
bRetSts = proc3();
break;
case 4:
...
}
if( bRetSts )
StepCurrent++;
}
【问题讨论】:
-
你可以使用状态模式。每个 proc 都在每个状态下使用。比你可以改变到下一个状态
-
您可以创建一个字典,其中数字为键,函数委托为值。这会使代码更小。
-
创建一个类似于 Action 的 Func
数组:stackoverflow.com/questions/23477823/… -
这看起来不错。不可避免的事情是,当某一天插入新的 proc 时,例如在 proc0 和 proc1 之间,我必须更新对以前的 proc1 的任何引用,现在是 proc2。 - 这种头痛可能是不可避免的。
标签: c# switch-statement controls sequence