0
我在交换机中有一堆情况。我需要将代码一次留在一个案例中,直到满足特定条件,然后我想告诉它要去哪个案例。我目前有这种情况发生,这不会导致错误,但它确实会导致我正在使用的程序不断加载并永远不会执行。C#在交换机中重复一个特定的情况
我需要的标准是布尔语句“激活”,直到它,我希望代码留在案例中。
有很多代码丢失,所以它可能没有意义,但我想知道是否有更好的方法来做到这一点。
另外,在你问之前,我还是一个初学者,我知道每个人都讨厌goto语句。如果你可以提出替代方案,我会倾听。
谢谢你明智的。
if(CurrentPosition.Value != 0){
switch(location)
{
case 0:
if(criteria1 && criteria2)
{
LimitLongsPT.Send(S1 + ((R1 - S1) * BuffZone));
LongStopSA.Send(S1 - StopAmount);
ShortStopDeep.Send(R1 + StopAmount);
TradeManager.ProcessEvents();
if(activated == true)
{
if(PublicFunctions.DoubleEquals(CurrentPosition.Value, 0))
{
break;
}
if(PublicFunctions.DoubleLess(CurrentPosition.Value, 0))
{
if(PublicFunctions.DoubleGreater(MP[0], S1) && PublicFunctions.DoubleLess(MP[0], R1))
{
goto case 15;
}
if(PublicFunctions.DoubleGreater(MP[0], R1) && PublicFunctions.DoubleLess(MP[0], R2))
{
goto case 16;
}
if(PublicFunctions.DoubleGreater(MP[0], S2) && PublicFunctions.DoubleLess(MP[0], S1))
{
goto case 23;
}
}
if(PublicFunctions.DoubleGreater(CurrentPosition.Value, 0))
{
if(PublicFunctions.DoubleGreater(MP[0], R1) && PublicFunctions.DoubleLess(MP[0], R2))
{
goto case 1;
}
}
}
}
**goto case 0;**
case 1:
if(PublicFunctions.DoubleGreater(CurrentPosition.Value, 0) && PublicFunctions.DoubleGreater(MP[0], R1) && PublicFunctions.DoubleLess(MP[0], R2))
{
或多或少,你似乎已经在那里的角落编码了;因为你切换了一件事,然后如果......另一件事;考虑到“情况23”,它似乎也是这个功能是巨大的。您需要分解代码并仔细考虑代码中的每个行为,以便可以封装它。这将有助于在相关条件下使用逻辑的原子位。 – zaitsman
在这种情况下'goto'的替代方法是一个_state machine_,其中'switch'块随时间执行多次。 'goto'通常是设计不佳的标志,你喜欢折磨小猫;) – MickyD
这听起来像标准变量随着时间的推移在这里变化。你有什么情况0:goto case 0是一个循环。你有没有考虑重构成一个while循环? – Assaf