maysam_p82 Ответов: 3

Исключение индекса вне диапазона для массива


if (coupleSubstrings.Count > 1)
      {
          for (int i = 0; i<coupleSubstrings.Count-1; i++)
              coupleTemp[i] = coupleSubstrings[i] +" "+ coupleSubstrings[i + 1];

          dt.Clear();
          if (!ViewReqInfo(dt, coupleTemp.ToArray()))
          {
              lblErrorMessage.CurrentValue = objWord.ErrMessage;
          }
          if (dt.Rows.Count > 0)
          {
              foreach (DataRow dr in dt.Rows)
              {
                  value = dr["IsInsult"].ToString();
                  if (value == "True")
                  {
                      lblErrorMessage.CurrentValue = string.Empty;
                      lblErrorMessage.CurrentValue = "این جمله شامل کلمات غیر مجاز می باشد.";
                      break;
                  }
                  else
                  {
                      lblErrorMessage.CurrentValue = string.Empty;
                      lblErrorMessage.CurrentValue = "این جمله نیازمند بررسی بیشتر است.";
                      txtEntry.CurrentValue = string.Join(" ", coupleTemp);
                  }
              }
          }
      }
  }


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

Этот метод не работает длина массива больше но я не знаю в чем проблема

3 Ответов

Рейтинг:
2

phil.o

Проблема должна быть в том, что coupleTemp массив, так как coupleSubstrings один из них правильно проиндексирован. Не могли бы вы показать декларацию президента? coupleTemp массив? Похоже, вы не обеспечили его достаточным количеством элементов (в идеале он должен иметь на один элемент меньше, чем coupleSubstrings массив).


Рейтинг:
2

Patrice T

Цитата:
Исключение индекса вне диапазона для массива

Наряду с сообщением об ошибке, вам также было сказано положение ошибки, было бы неплохо поделиться. Поскольку код snipset не является автономным, трудно догадаться, что есть что.
Цитата:
Этот метод не работает длина массива больше но я не знаю в чем проблема

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

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

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

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладка кода C# в Visual Studio - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
1

OriginalGriff

Посмотрите на свой код:

for (int i = 0; i<coupleSubstrings.Count-1; i++)
          coupleTemp[i] = coupleSubstrings[i] +" "+ coupleSubstrings[i + 1];
Цикл запускает i от последнего элемента в массиве, но затем вы получаете доступ к этому элементу плюс один - который по определению не существует.


phil.o

Я прочитал его несколько раз, чтобы быть уверенным, массив индексируется до предпоследнего элемента (i < coupleSubstrings.Count - 1).