0
스위치에 여러 사례가 있습니다. 특정 기준이 충족 될 때까지 한 번에 한 가지 경우에 머물도록 코드가 필요합니다. 그런 다음 어떤 사례로 가야할지 말해주고 싶습니다. 나는 현재이 사건을 스스로 진행하고 있는데, 이것은 오류를 일으키지 않지만 계속로드하고 실행하지 않는 프로그램을 유발합니다.C# 스위치의 특정 사례 반복
필자가 만족해야 할 기준은 bool 문 'activated'이며, 그 때까지는 코드가 남아 있어야합니다.
누락 된 코드가 많아 이해가되지 않을 수 있지만 더 좋은 방법이 있는지 알고 싶습니다.
또한 물어보기 전에, 나는 아직 초보자이며 모두가 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'의 대안은 'switch'블록이 시간이 지남에 따라 여러 번 실행되는 _state machine_입니다. 'goto'는 일반적으로 가난한 디자인의 징후이고 고양이를 고문하는 것을 좋아합니다;) – MickyD
시간이 지남에 따라 변수가 변하는 것 같습니다. case 0의 경우 : goto case 0은 루프입니다. while 루프로 리팩터링을 고려해 보셨습니까? – Assaf