2009-07-03 9 views
3

Mein Verständnis der Integer.TryParse() - Funktion war, dass es versucht, eine ganze Zahl von der übergebenen Zeichenfolge zu analysieren und wenn die Analyse fehlschlagen würde die Ergebnis-Ganzzahl so bleiben wie zuvor.Warum setzt Integer.TryParse bei einem Fehler das Ergebnis auf Null?

Ich habe eine ganze Zahl mit einem Standardwert von -1, die ich gerne bei -1 bleiben würde, wenn die Analyse fehlschlägt. Die Funktion Integer.TryParse() bei fehlgeschlagener Analyse ändert diesen Standardwert jedoch auf Null.

Dim defaultValue As Integer = -1 
Dim parseSuccess As Boolean = Integer.TryParse("", defaultValue) 
Debug.Print("defaultValue {0}", defaultValue) 
Debug.Print("parseSuccess {0}", parseSuccess) 

Meine Erwartung ist, dass der Code-Snippet oben sollte eine Ausgabe:

defaultValue -1 
parseSuccess False 

aber stattdessen gibt sie:

defaultValue 0 
parseSuccess False 

Ist mein Verständnis richtig?

Antwort

20

Es ist ein out Parameter, die es bedeutet, muss durch das Verfahren eingestellt werden (es sei denn es eine Ausnahme auslöst) - das Verfahren kann nicht sehen, was der ursprüngliche Wert war.

Die Alternative wäre gewesen, es einen ref Parameter zu machen und es nur auf Erfolg gesetzt, aber das bedeutet Anrufer zwingen würde die Variable zuerst selbst zu initialisieren, wenn sie nicht dieses Verhalten haben wollten.

Sie können Ihre eigene Hilfsmethode obwohl schreiben:

public bool TryParseInt32(string text, ref int value) 
{ 
    int tmp; 
    if (int.TryParse(text, out tmp)) 
    { 
     value = tmp; 
     return true; 
    } 
    else 
    { 
     return false; // Leave "value" as it was 
    } 
} 
3

Sie haben Recht, TryParse verwendet 0, wenn es fehlschlägt. (MSDN sagt dies ganz klar) Aber Sie könnten paseSuccess überprüfen und Ihren Standardwert zurückgeben, wenn dies das ist, was Sie wollen.

Verwandte Themen