C# System.OverflowException Ошибка в циклах - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь упростить чье-то кодирование, чтобы сделать коды более читабельными. Однако при выполнении следующего кода я обнаружил ошибку «System.OverFlowException». Я запускаю код в визуальной студии 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;
        }

    }

}

1 Ответ

0 голосов
/ 26 марта 2020

Скорее всего ошибка возникает в методе Convert.ToInt16 . Поэтому убедитесь, что значения не выходят за пределы диапазона типа Int16 .

Также обратите внимание на перегруженный метод WriteLine с параметром строки формата. Таким образом, следующая строка кода:

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

будет выглядеть так:

Console.WriteLine("CurrentIndexToMod / Mod/ Index : {0}", mod);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...