ArgumentOutOfRangeException был необработан

Дополнительные сведения об исключении: индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции. Имя параметра: индекс

Читая исключение, я понимаю, что он пытается мне сказать. Чего я не понимаю, так это почему Вот фрагмент соответствующего кода:

        //the model contains more than one mesh, so each
        //one must be accounted for in the final sphere
        List<BoundingSphere> spheres = new List<BoundingSphere>();
        int index = 0;

        //cycle through the meshes
        foreach (ModelMesh mesh in this.model.Meshes)
        {
            //and grab its bounding sphere
            spheres[index++] = mesh.BoundingSphere; //<- this is the line that throws the exception
        } //end foreach

Во время отладки я вижу в таблице, предоставленной Visual Studio, что мой model.Meshes.Count равен 5, а на текущей итерации индекс равен 1. Индекс меньше размера моей коллекции, и он неотрицателен,

Что бросает исключение? Я пытался найти похожие примеры, но пока не нашел ответа на свой вопрос.

Заранее спасибо.

3 ответа

Решение

Вам нужно использовать list.Add(...) вместо индексации.

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

Ты хотел написать spheres.Add(mesh.BoundingSphere), Ваш spheres list is empty after you created it. You cannot access an item which is not there.

Вам нужно использовать метод Add, чтобы увеличить размер списка. Так что постарайтесь spheres.Add(mesh.BoundingSphere); скорее, чем spheres[index++] = mesh.BoundingSphere;

Другие вопросы по тегам