ArgumentOutOfRange в списке - PullRequest
       1

ArgumentOutOfRange в списке

0 голосов
/ 21 декабря 2018

У меня есть проект Unity3D.В этом проекте я должен добавить некоторые данные в список с определенным индексным номером, но он выдаст мне следующую ошибку:

ArgumentOutOfRangeException: Аргумент находится вне диапазона.Имя параметра: индекс

Это мой код:

foreach (var Player in PhotonNetwork.PlayerList)
{
    NameList.Clear();
    if ((int)Player.CustomProperties["GameCount"] == First)
    {
        NameList.Insert(0 ,(string)PhotonNetwork.LocalPlayer.CustomProperties["Name"]);
    }
    else if ((int)PhotonNetwork.LocalPlayer.CustomProperties["GameCount"] == Second)
    {
        NameList.Insert(1 ,(string)Player.CustomProperties["Name"]);
    }
    else if ((int)Player.CustomProperties["GameCount"] == Third)
    {
        NameList.Insert(2,(string)PhotonNetwork.LocalPlayer.CustomProperties["Name"]);
    }
    else if ((int)Player.CustomProperties["GameCount"] == Fourth)
    {
        NameList.Insert(3, (string)PhotonNetwork.LocalPlayer.CustomProperties["Name"]);
    }
}

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Если вы первый element(0) не вставили, но вставили второй element(1), то этот аргумент находится вне диапазона.Пример: если программа выполняется сначала:

NameList.Insert(2,(string)PhotonNetwork.LocalPlayer.CustomProperties["Name"]);

, но не выполняется:

 NameList.Insert(0 ,(string)PhotonNetwork.LocalPlayer.CustomProperties["Name"]);
0 голосов
/ 21 декабря 2018

Метод Insert выглядит следующим образом: public void Insert (int index, T item);.

И исключение выдается в двух сценариях, так как MSDN сообщает в части о ArgumentOutOfRangeException :

  1. Параметр index меньше 0.
  2. Параметр index больше Count.

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

Что я могу посоветовать вам, так это выполнить некоторую отладкуи посмотрите, когда у вас будет меньше элементов.Или использовать Add вместо Insert, дополнительную информацию вы можете найти здесь .

ОБНОВЛЕНИЕ

Например, когда вывы пытаетесь выполнить

NameList.Insert(3, (string)PhotonNetwork.LocalPlayer.CustomProperties["Name"]);

вы пытаетесь вставить элемент в положение 3, но если у вас есть только 1 элемент в списке, ваша вставка выдает ошибку.

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