2012-04-01 20 views
0

Ich habe eine Quelle für ein Spiel, das ich spiele. Die Konsole gibt einen Fehler aus, sobald ich mich im Spiel anmelde. Hier ist der Fehler:C# Fehler in der Konsole

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 

hier die Codes sind:

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



Hilfe geschätzt wird!

+0

Bitte, bitte, bitte, bemühen Sie sich, Ihren Code richtig zu formatieren. Es ist eine spezielle Codeformatierung verfügbar. (Die '{}' Taste). –

Antwort

0

Überprüfen Sie, ob Item.Length - Platz + 1 größer als 0

1

Versuchen Sie, diese Methode anstelle verwenden.

Wenn es eine Ausnahme auslöst, bedeutet dies, dass die ID falsch/leer ist.

0

Sie erhalten diese Fehlermeldung, weil, wenn Sie den folgenden Anruf:

ChangeDigit(4, 0); 

Der Wert von ID nicht weniger als 3 Zeichen lang sein kann.

Zum Beispiel, sagen ID = "AB", wenn Sie Item.Remove(Place - 1, Item.Length - Place + 1)-ChangeDigit(4, 0) innerhalb des Anrufs dann rufen wird es im Wesentlichen das tun:

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

Wie man hier sehen kann, das count Argument ist -1, die in der Folge hätte Ausnahme erhalten Sie Count cannot be less than zero.

Sie müssen Ihr Programm in den Debugger bringen und einen Blick darauf werfen, was der ID-Wert zum Zeitpunkt ist, zu dem die Ausnahme ausgelöst wird. Vielleicht ist die ID eine leere Zeichenkette oder nicht das, was Sie aufgrund eines Fehlers irgendwo anders in Ihrem Code erwarten?