ArgumentOutOfRangeException был необработан - PullRequest
0 голосов
/ 20 сентября 2011

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

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

        //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 ]

3 голосов
/ 20 сентября 2011

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

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

1 голос
/ 20 сентября 2011

Вы хотели написать spheres.Add(mesh.BoundingSphere). Ваш список spheres пуст после того, как вы его создали. Вы не можете получить доступ к элементу, которого там нет.

1 голос
/ 20 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...