Ошибка C # в консоли - PullRequest
       1

Ошибка C # в консоли

0 голосов
/ 01 апреля 2012

У меня есть источник для игры, в которую я играю. Консоль выдает ошибку, когда я вхожу в игру. Вот ошибка:

System.ArgumentOutOfRangeException: Count cannot be less than zero.
Parameter name: count
   at System.String.RemoveInternal(Int32 startIndex, Int32 count)
   at ConquerServer.Extra.ItemIDManipulation.ChangeDigit(Byte Place, Byte To) in C:\Documents and Settings\Administrator\Desktop\ConquerServer\ConquerServer\Extra.cs:line 134
   at ConquerServer.Extra.ItemIDManipulation.ToComposeID(Byte EqPos) in C:\Documents and Settings\Administrator\Desktop\ConquerServer\ConquerServer\Extra.cs:line 235
   at ConquerServer.Entities.Character.EqpStats(Byte Pos, Boolean Equip) in C:\Documents and Settings\Administrator\Desktop\ConquerServer\ConquerServer\Entities\Character.cs:line 1361
   at ConquerServer.Entities.Character.SendExtra() in C:\Documents and Settings\Administrator\Desktop\ConquerServer\ConquerServer\Entities\Character.cs:line 1637

Вот коды:

public void ChangeDigit(byte Place, byte To)
            {
                string Item = Convert.ToString(ID);
                string N = Item.Remove(Place - 1, Item.Length - Place + 1) + To.ToString();
                N += Item.Remove(0, Place);
                ID = uint.Parse(N);
            }


if (EqPos == 1 || EqPos == 3)
                {
                    ChangeDigit(4, 0);
                    ChangeDigit(6, 0);
                }

Extra.ItemIDManipulation e = new Extra.ItemIDManipulation(Equipment[Pos].ID);
                uint PID = e.ToComposeID(Pos);


if (Equipment[i].ID != 0)
                    {
                        MyClient.SendData(Packets.AddItem(Equipment[i], i));
                        EqpStats(i, true);
                    }



Помощь будет оценена!

Ответы [ 3 ]

1 голос
/ 01 апреля 2012

Попробуйте использовать этот метод вместо.

   public void ChangeDigit(byte Place, byte To) 
   { 
       string Item = Convert.ToString(ID, CultureInfo.InvariantCulture);

       if(Place > Item.Length || Place < 1)
           throw new ArgumentOutOfRangeException("Place");

       Item = Item.Remove(Place-1) + To.ToString() + Item.Substring(Place)
       ID = uint.Parse(Item, CultureInfo.InvariantCulture);
   } 

Если выдается исключение, это означает, что идентификатор неверный / пустой.

0 голосов
/ 01 апреля 2012

Вы получаете эту ошибку, потому что, когда вы делаете следующий вызов:

ChangeDigit(4, 0);

Значение ID не может быть меньше 3 символов в длину.

Например, скажем ID = "AB", когда вы затем позвоните Item.Remove(Place - 1, Item.Length - Place + 1) в рамках вызова на ChangeDigit(4, 0), он, по сути, будет делать это:

int startIndex = 4 - 1 // 3
int count = 2 - 4 + 1 // -1
"AB".Remove(startIndex, count)

Как вы можете видеть здесь,аргумент count равен -1, что приведет к исключению, которое вы получаете Count cannot be less than zero.

Вам нужно запустить свою программу в отладчике и посмотреть, какое значение идентификатора находится навремя исключение бросается.Возможно, идентификатор - пустая строка, или вы не ожидаете его из-за ошибки где-то еще в вашем коде?

0 голосов
/ 01 апреля 2012

Проверьте, если Item.Length - Place + 1 больше 0

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