Deepak9991 Ответов: 2

Индекс вне границы массива


public static int insLabTestingDetails(Object objBrStone)
       {
           int iStatus;
           try
           {
               string[] arrBooking = BAL.JSONToString(objBrStone);
               LabTesting clsLab = new LabTesting();
               clsLab.Lab = arrBooking[0].Split(':')[1];
               clsLab.Agr_No = arrBooking[1].Split(':')[1];
               clsLab.BillNo = arrBooking[2].Split(':')[1];
               clsLab.ReturnDate = arrBooking[3].Split(':')[1];
               clsLab.Return_By = arrBooking[4].Split(':')[1];
               clsLab.Remark = arrBooking[5].Split(':')[1];
               clsLab.TestingId = int.Parse(arrBooking[6].Split(':')[1]);

               BAL clsBAL = new BAL();
               iStatus = clsBAL.UpdateLabTesting(clsLab);
               return iStatus;
           }
           catch (Exception err)
           {
               iStatus = 0;
               BAL.errToFile(err);
           }
           return iStatus;


Что я уже пробовал:

Log Written Date: 03/07/2020 13:34:56
Error Line No : line 58
Error Message: IndexOutOfRangeException
Exception Type: System.IndexOutOfRangeException
Error Location : Index was outside the bounds of the array.
 Error Page Url: https://coral.amber.cx/TestingLab.aspx/insLabTestingDetails


Файл журнала показывает, что индекс ошибки находился за пределами массива. Как я могу решить эту проблему в приведенной выше функции.

F-ES Sitecore

Этот вопрос задается каждый день, пожалуйста, сделайте фундаментальное исследование, прежде чем задавать такой вопрос, как использование google. Найдите сообщение об ошибке или посмотрите на множество "связанных вопросов" в правой части экрана, и вы получите точно такой же ответ, как и все эти.

Patrice T

и строка 58 есть ...

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Файл журнала показывает, что индекс ошибки находился за пределами массива.

Независимо от того, в чем именно заключается проблема, это означает, что где-то в вашем коде вы ожидаете, что массив будет заданного размера, но короче.
Единственное, что нужно сделать, это проверить размер массива, либо вы меняете свой код для выполнения проверки, либо используете отладчик.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
0

Richard MacCutchan

Посмотрите на строку 58 и посмотрите, на какие значения индекса или переменные ссылаются. Затем, если вы не можете понять, почему, вам нужно запустить код в отладчике и перехватить его в точке исключения. Это позволит вам изучить все переменные, чтобы диагностировать проблему.

Кстати, такие строки, как следующие, - не самая лучшая идея:

clsLab.Lab = arrBooking[0].Split(':')[1];

Если данные, которые вы разделяете, не содержат двух полей, разделенных двоеточием, то этот оператор вызовет ошибку. Сначала выполните разделение и проверьте результаты, чтобы убедиться, что у вас есть правильное количество полей. Никогда не думайте, что ваши данные находятся в правильном формате.


0x01AA

А также уже в том случае, если аррбукинг пуст. +5

Richard MacCutchan

Именно так, но я надеялся, что ОП поймет это (да, я знаю, что он, вероятно, не поймет).