2012-04-01 28 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

コードを正しくフォーマットするよう努力してください。特定のコードフォーマットが利用可能です。 ( '{}'ボタン)。 –

答えて

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が間違っている/空であることを意味します。

ChangeDigit(4, 0); 

IDの値の長さが3未満の文字をすることはできません:あなたは、次の呼び出しを行うときので

0

あなたはこのエラーを取得しています。例えば

が、それは基本的にこのことになるだろうあなたが ChangeDigit(4, 0)への呼び出し内 Item.Remove(Place - 1, Item.Length - Place + 1)を呼び出す ID = "AB"を、言う:あなたがここに見ることができるように

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は空文字列か、コード内のどこか他のバグのために期待していないものでしょうか?

関連する問題