Behandeln von FormatException beim Konvertieren von Zeichenfolgen in andere Typen

Behandeln von FormatException beim Konvertieren von Zeichenfolgen in andere Typen

# String in Integer umwandeln

Um einen string explizit umzuwandeln, stehen verschiedene Methoden zur Verfügung zu einem integer , wie zum Beispiel:

  • `Convert.ToInt16();`
  • `Convert.ToInt32();`
  • `Convert.ToInt64();`
  • `int.Parse();`
  • Aber alle diese Methoden werden einen FormatException auslösen , wenn die Eingabezeichenfolge nicht numerische Zeichen enthält. Dazu müssen wir eine zusätzliche Ausnahmebehandlung schreiben (try..catch ), um sie in solchen Fällen zu behandeln.

    Erklärung mit Beispielen:

    Lassen Sie unsere Eingabe also sein:

    string inputString = "10.2";
    
    

    Beispiel 1: Convert.ToInt32()

    int convertedInt = Convert.ToInt32(inputString); // Failed to Convert 
    // Throws an Exception "Input string was not in a correct format."
    
    

    Hinweis: Gleiches gilt für die anderen erwähnten Methoden, nämlich - Convert.ToInt16(); und Convert.ToInt64();

    Beispiel 2: int.Parse()

    int convertedInt = int.Parse(inputString); // Same result "Input string was not in a correct format.
    
    

    Wie umgehen wir das?

    Wie bereits erwähnt, benötigen wir für die Behandlung der Ausnahmen normalerweise einen try..catch wie unten gezeigt:

    try
    {
        string inputString = "10.2";
        int convertedInt = int.Parse(inputString);
    }
    catch (Exception Ex)
    {
        //Display some message, that the conversion has failed.         
    }
    
    

    Aber mit dem try..catch überall wird keine gute Praxis sein, und es kann einige Szenarien geben, in denen wir 0 geben wollten wenn die Eingabe falsch ist, (Wenn wir der obigen Methode folgen, müssen wir 0 zuweisen bis convertedInt vom Fangblock). Um solche Szenarien zu handhaben, können wir eine spezielle Methode namens .TryParse() verwenden .

    Die .TryParse() Methode mit einer internen Ausnahmebehandlung, die Ihnen die Ausgabe an out gibt -Parameter und gibt einen booleschen Wert zurück, der den Konvertierungsstatus (true ob die Konvertierung erfolgreich war; false wenn es fehlgeschlagen ist). Anhand des Rückgabewerts können wir den Konvertierungsstatus ermitteln. Sehen wir uns ein Beispiel an:

    Verwendung 1: Speichern Sie den Rückgabewert in einer booleschen Variablen

    
    int convertedInt; // Be the required integer
     bool isSuccessConversion = int.TryParse(inputString, out convertedInt);
    
    

    Wir können die Variable isSuccessConversion prüfen nach der Ausführung, um den Konvertierungsstatus zu überprüfen. Wenn es falsch ist, dann der Wert von convertedInt wird 0 sein (Sie müssen den Rückgabewert nicht überprüfen, wenn Sie 0 möchten für Konvertierungsfehler).

    Verwendung 2: Überprüfen Sie den Rückgabewert mit if

    if (int.TryParse(inputString, out convertedInt))
    {
        // convertedInt will have the converted value
        // Proceed with that
    }
    else 
    {
     // Display an error message
    }
    
    

    Verwendung 3: Ohne den Rückgabewert zu überprüfen, können Sie Folgendes verwenden, wenn Sie sich nicht um den Rückgabewert kümmern (konvertiert oder nicht, 0 wird in Ordnung sein)

    int.TryParse(inputString, out convertedInt);
    // use the value of convertedInt
    // But it will be 0 if not converted
    
    

    No