Почему List.Add () возвращает ошибку индекса? - PullRequest
0 голосов
/ 02 апреля 2020

По какой-то причине это выдает следующее сообщение об ошибке в строке sortOrderList.Add ():

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

Вот структура базы данных, которую я сортирую.

enter image description here

То, что выполняет часть приведенного ниже сценария, - это создание списка местоположений индексов для каждого из типов, которые можно найти в разных местоположениях, в зависимости от их порядка загрузки. Список sortOrderList показывает порядок загрузки каждого из типов, где a для l oop может перебирать от 0 до sortOrderList.Count - 1 для учета всех различных типов во всех объединенных категориях и доступа к ним позже в Сценарий ниже.

Например, если ниже указаны местоположения разных типов, каждый из которых имеет свой метод: Список {тип1 1, тип2 2, тип2 3, тип1 4, тип1 5, тип2 6}, то где type2 загружается первым, sortOrderList равен {2, 3, 6, 1, 4, 5}. type1 и type2 должны представлять методы, определенные в приведенном ниже сценарии.

foreach (DataClasses.DependencyMethodEnum method in dataClasses.DependencyMethodOrder)//for order of dependencies; add SortOrderList after the localTypeNames have been completely filled
    {
        for (int i1 = 0; i1 < categoryNames.Count; i1++)//for each category i1
        {
            for (int i2 = 0; i2 < listsTypeNames[i1].Count; i2++)//for each type i2
            {
                if (listsTypeMethods[i1][i2] == method)//if the dependency order aligns with the current type
                {
                    int iterations = 0;
                    bool breaking = false;

                    for (int i4 = 0; i4 < categoryNames.Count; i4++)//again for each category i4; this is to sort out where the original order would be on the main list Lists//IS INEFFECTIVE: CALLS THE SAME ONE INSIDE EACH CATEGORY
                    {
                        for (int i5 = 0; i5 < listsTypeNames[i4].Count; i5++)//for each type i5
                        {
                            Debug.Log(localTypeNames.Count);//high number....
                            Debug.Log(sortOrderList.Count);//0... so why is there an error when I later use .Add?

                            if (listsTypeNames[i4][i5] == listsTypeNames[i1][i2] && (sortOrderList.Count == 0 || (sortOrderList.Count != 0 && listsTypeNames[i4][i5] != localTypeNames[sortOrderList[sortOrderList.Count - 1]])))
                            {
                                Debug.Log("PASS");
                                Debug.Log("ITERATIONS:" + iterations);
                                Debug.Log("SOL COUNT: " + sortOrderList.Count);

                                sortOrderList.Add(iterations);//adds where the original position would have been for the type in the order of where it is in the local list//ERROR HERE

                                Debug.Log("sol " + sortOrderList.Count + " : " + localTypeNames[sortOrderList[iterations]]);
                                breaking = true;
                                break;
                            }

                            iterations++;
                        }

                        if (breaking)
                        {
                            break;
                        }
                    }
                }
            }
        }
    }

Почему это происходит? Я не обращаюсь к указанному индексу c в слое sortOrderList.Add (), но все равно выдает ошибку. Вот лог.

enter image description here

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

1 Ответ

0 голосов
/ 02 апреля 2020

Кто-то указал, что

Debug.Log ("sol" + sortOrderList.Count + ":" + localTypeNames [sortOrderList [iterations]]);

на самом деле является реальным источником проблемы, так как когда sortOrderList.Count = 1 и он ищет путь итерации позже, он возвращает ошибку индекса. Спасибо всем за помощь! Если человек ответит на StackOverflow, я отмечу его ответ правильным.

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