簡體   English   中英

循環中的 C# System.OverflowException 錯誤

[英]C# System.OverflowException Error in loops

我試圖簡化某人的編碼,讓代碼更具可讀性。 但是,當我運行以下代碼時,遇到了“System.OverFlowException”錯誤。 我在 Visual Studio IDE 中運行代碼。 函數“Transmit_Data”僅用於存儲數據數組。 “TotalIndexToMod”是數組的長度,“CurrentLoopIndexCnt”是“TotalIndexToMod”的當前循環索引號。 以下是代碼(在 C# 中):

int TotalIndexToMod = 28;
int MaxLoopIndexCnt = 16;


for (int mod = 0; mod < TotalIndexToMod; mod++)
{

    int LeftToMod = MaxLoopIndexCnt - CurrentLoopIndexCnt;

    Transmit_Data(mod, LeftToMod);

    CurrentLoopIndexCnt++;

    Console.WriteLine("CurrentIndexToMod / Mod/ Index : " + Convert.ToInt16(mod));
    CurrentIndexToMod = mod;
    Console.WriteLine("CurrentLoopIndexCnt : " + Convert.ToInt16(CurrentLoopIndexCnt));
    Console.WriteLine("MaxLoop : " + Convert.ToInt16(MaxLoop));
    Console.WriteLine("MaxLoopIndexCnt : " + Convert.ToInt16(MaxLoopIndexCnt));


    if (CurrentLoopIndexCnt > MaxLoopIndexCnt)
    {
        CurrentLoopCnt++;

        if (CurrentLoopCnt > MaxLoop) // last loop end
        {
            // byte Mod_State = (byte)(RxMsg.DATA[0] & 0x03);

            if (CurrentIndexToMod == 128)
            {
                //do something
            }
            else
            {
                //do something
            }
        }
        else
        {
            if (CurrentLoopCnt < MaxLoop)
            {
                MaxLoopIndexCnt = 16;
            }
            else if (CurrentLoopCnt == MaxLoop) // last loop
            {
                MaxLoopIndexCnt = SpareMaxLoopIndexCnt;
            }

            CurrentLoopIndexCnt = 1;
        }

    }

}

最有可能的錯誤發生在方法Convert.ToInt16 中 所以請確保值不超出Int16類型的范圍。

還請考慮帶有格式字符串參數的重載方法WriteLine 這樣,下面這行代碼:

Console.WriteLine("CurrentIndexToMod / Mod/ Index : " + Convert.ToInt16(mod));

看起來像這樣:

Console.WriteLine("CurrentIndexToMod / Mod/ Index : {0}", mod);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM