riya rawat Ответов: 1

Как решить проблему " индекс был вне диапазона. Должно быть неотрицательным и меньше размера коллекции." в ASP .NET с использованием C#


мой код выглядит следующим образом
я хочу, чтобы я выбирал некоторые элементы из списка, а выбранные элементы автоматически добавлялись в другой список и удалялись из первого списка .
в asp.net использование c#.

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

охраняемых недействительными ListBox3_SelectedIndexChanged(объект отправителя, EventArgs в электронной)
{

}
охраняемых недействительными ListBox4_SelectedIndexChanged(объект отправителя, EventArgs в электронной)
{

}
охраняемых недействительными Button6_Click(объект отправителя, EventArgs в электронной)
{
int i;
for (i = 0; i <= ListBox3.Предметы.Граф; i++)
{
если (ListBox3.Элементы[я].Избранные == правда)
{
ListBox4.Предметы.Добавить(ListBox3.SelectedItem);
ListBox3.Предметы.Удалить(ListBox3.SelectedItem);
}
}









}
}

F-ES Sitecore

Вы перебираете количество элементов в ListBox3 (допустим, их 5) и удаляете их по мере их удаления (допустим, вы удаляете 2, так что остается 3), Когда вы нажимаете i being three, он ищет четвертый элемент, но есть только 3. Раньше их было 5, но вы их удалили.

Разорвите цикл, когда вы найдете выбранный элемент, и используйте цикл "while" или какой-либо другой механизм, который циклирует до тех пор, пока ничего в списке не будет выбрано. Альтернативой является добавление выбранных элементов в новый список, и как только вы пройдете через них по списку, выполните цикл по новому списку, который вы создали, и удалите\add в этом цикле.

Richard Deeming

Наверное проще просто повернуть петлю вспять:

for (int i = ListBox3.Items.Count - 1; i >= 0; i--) { ...


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

Но итерация вперед все равно приведет к пропуску элементов.

F-ES Sitecore

Учитывая, что он добавляет элементы в другой элемент управления, я бы предположил, что он хочет сохранить порядок элементов, если это так, то ему также нужно будет вставить их в начало коллекции, но если это был второй раз, когда код был запущен, это также может иметь нежелательные результаты. Вещи всегда кажутся такими простыми в вашем уме, прежде чем вы начнете на самом деле кодировать :)

1 Ответов

Рейтинг:
0

Jochen Arndt

Подсказка находится в части сообщения об ошибке "меньше размера коллекции", поскольку вы выполняете итерацию до этого размера и включительно:

for (i = 0; i <= ListBox3.Items.Count; i++)
Так и должно быть
for (i = 0; i < ListBox3.Items.Count; i++) 


[РЕДАКТИРОВАТЬ]
Как отметил Ричард, ваш цикл может пропустить элементы, и вы должны повторить итерацию вниз, начиная с последнего элемента.
[/РЕДАКТИРОВАТЬ]


Richard Deeming

Это все равно приведет к пропуску предметов. :)

Jochen Arndt

Да. Я понял, что это слишком подло.

Но вопрос был в том, "как решить индекс вне диапазона ошибки" :)