2016-06-14 5 views
0

Hallo, ich versuche String in Integer zu konvertieren.Konvertieren Zeichenfolge in Int Fehler in C#

Der folgende Code zeigt einen Teil von wo ich versuche, meine Zeichenfolge in Ganzzahl zu konvertieren.

if (other.gameObject.CompareTag("PickUp")) 
{ 
    if (checkpointboolean == false) 
    { 
     string pickupName = other.ToString(); //other = Pickup4 
     //Remove first 6 letters thus remaining with '4' 
     string y = pickupName.Substring(6); 
     print(y); // 4 is being printed 
     int x = 0; 
     int.TryParse(y, out x); 
     print (x); // 0 is being printed 

Ich habe auch versucht, den Code unten und anstelle von ‚0‘ ich die folgende Störung erhalte:

if (other.gameObject.CompareTag("PickUp")) 
{ 
    if (checkpointboolean == false) 
    { 
     //Get Object name ex: Pickup4 
     string pickupName = other.ToString(); 
     //Remove first 6 letters thus remaining with '4' 
     string y = pickupName.Substring(6); 
     print(y); 
     int x = int.Parse(y); 

FormatException: Input string was not in the correct format System.Int32.Parse (System.String s)

+0

Wie sicher sind Sie, dass es keine Charaters sind * nach * die 4? Versuchen Sie, 'y.Length' zu drucken ... –

+0

Sie müssen es Schritt für Schritt mit Breakpoints debuggen –

+2

Dies scheint Ihnen zu sagen, dass Ihre Zeichenfolge ungültige Zeichen enthält. Sind Sie sicher, dass Sie nur eine 4 in diesem Teilstring haben? Wenn Sie einen Debugger haben, versuchen Sie, diesen Wert zu betrachten. Wenn Sie ihn nicht haben, ändern Sie ihn mit einem Ausdruck ("[" + y + "]"); um zu sehen, ob es andere Zeichen gibt – Steve

Antwort

1

int.TryParse einen Booleschen Wert zurück, true, wenn es und falsch gelungen, wenn nicht. Sie müssen dies in einen if-Block einfügen und etwas mit dieser Logik tun.

Soweit, warum Ihre Nummer nicht konvertiert wird, konnte ich nicht sagen, bis Sie den Wert der Zeichenfolge posten.

0

Ihr erster Versuch ist die beste für diesen Fall, dass Code funktioniert gut, die int.TryParse()0 an den Out-Parameter übergeben wird, und gibt falsche bedeutet, dass die Konvertierung fehlgeschlagen ist. Die Eingabezeichenfolge hat nicht das richtige Format/sie kann nicht in eine Ganzzahl konvertiert werden. Sie können dies überprüfen, indem Sie den Rückgabewert int.TryParse() verwenden. Für das, was müssen Sie tun: -

if(int.TryParse(y, out x)) 
    print (x); // 
else 
    print ("Invalid input - Conversion failed"); 
+3

"Die int.TryParse() Ausgabe als 0 bedeutet, dass die Konvertierung fehlgeschlagen ist." - Eigentlich bedeutet es, dass es fehlgeschlagen ist. Es könnte auch nur eine Zeichenfolge sein, die 0 enthält. OP sollte den Rückkehrcode richtig überprüfen. – CompuChip

+0

@CompuChip: Nun, aber nicht "eine Zeichenfolge, die 0 enthält", es wird "0" sein, wenn die Eingabe "0" ist –

0

Zunächst einmal verwendet ToString() in der Regel für Debug-Zwecke so gibt es keine Garantie, dass

other.ToString() 

würde die erwartete "Pickup4" in der nächsten Version zurückkehren der Software. Sie wahrscheinlich wollen so etwas wie

int x = other.gameObject.SomeProperty; 
    int x = other.SomeOtherProperty; 
    int x = other.ComputePickUp(); 
    ... 

Wenn Sie jedoch darauf bestehen, .ToString() Sie lieber nicht hart codieren sechs Buchstaben (der Grund ist der gleiche: Debug-Informationen neigt sich von Version zu Version zu ändern), aber regulärer Ausdrücke oder etwas verwenden:

var match = Regex.Match(other.ToString(), "-?[0-9]+"); 

    if (match.Success) { 
    int value; 

    if (int.TryParse(match.Value, out value)) 
     print(value); 
    else 
     print(match.Value + " is not an integer value"); 
    } 
    else 
    print("Unexpected value: " + other.ToString());