2012-04-01 69 views
0

我有我玩游戏的源代码。一旦我登录游戏,控制台会引发错误。以下是错误:控制台中的C#错误

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); 
        } 



帮助将不胜感激!

+0

请,请努力正确地格式化您的代码。有特殊的代码格式可用。 ('{}'按钮)。 – 2012-04-01 12:39:03

回答

0

检查Item.Length - 广场+ 1大于0

1

尝试使用这种方法来代替。

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); 
    } 

如果它抛出一个异常,这意味着ID是错误/空的。

0

您收到此错误,因为当你做以下电话:

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

您需要在调试器中启动程序,并查看抛出异常时的ID值。也许这个ID是一个空字符串,或者不是因为你的代码中的其他位置的错误而期望它成为什么?