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