控制台中的C#错误

控制台中的C#错误,c#,console,C#,Console,我有一个我玩的游戏的来源。一旦我登录游戏,控制台就会抛出一个错误。以下是错误: System.ArgumentOutOfRangeException: Count cannot be less than zero. Parameter name: count at System.String.RemoveInternal(Int32 startIndex, Int32 count) at ConquerServer.Extra.ItemIDManipulation.ChangeDig

我有一个我玩的游戏的来源。一旦我登录游戏,控制台就会抛出一个错误。以下是错误:

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



谢谢你的帮助

检查Item.Length-Place+1是否大于0

尝试使用此方法

   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);
   } 
public void ChangeDigit(字节位置,字节到)
{ 
字符串项=Convert.ToString(ID,CultureInfo.InvariantCulture);
如果(位置>项目长度| |位置<1)
抛出新ArgumentOutOfRangeException(“位置”);
Item=Item.Remove(Place-1)+To.ToString()+Item.Substring(Place)
ID=uint.Parse(项,CultureInfo.InvariantCulture);
} 

如果它抛出异常,则表示ID错误/为空。

您会收到此错误,因为当您进行以下调用时:

ChangeDigit(4, 0);
ID
的值长度不能小于3个字符

例如,当您调用
Item.Remove(Place-1,Item.Length-Place+1)
时,在对
ChangeDigit(4,0)
的调用中说
ID=“AB”
,基本上就是这样做的:

int startIndex = 4 - 1 // 3
int count = 2 - 4 + 1 // -1
"AB".Remove(startIndex, count)
正如您在这里看到的,
count
参数是
-1
,这将导致您得到的异常
计数不能小于零


您需要在调试器中启动程序,并查看引发异常时的ID值。可能ID是一个空字符串,或者由于代码中其他地方的错误而不是您所期望的ID?

请,请,请,请努力正确格式化代码。有特殊的代码格式可用。(点击
{}
按钮)。