Szukaj…


Konwertowanie ciągu na liczbę całkowitą

Dostępne są różne metody jawnego konwertowania string na integer , takie jak:

  1. Convert.ToInt16();

  2. Convert.ToInt32();

  3. Convert.ToInt64();

  4. int.Parse();

Ale wszystkie te metody FormatException , jeśli ciąg wejściowy zawiera znaki nienumeryczne. W tym celu musimy napisać dodatkową obsługę wyjątków ( try..catch ), aby zająć się nimi w takich przypadkach.


Objaśnienie z przykładami:

Niech więc nasz wkład będzie:

string inputString = "10.2";

Przykład 1: Convert.ToInt32()

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

Uwaga: To samo dotyczy innych wymienionych metod, a mianowicie - Convert.ToInt16(); i Convert.ToInt64();

Przykład 2: int.Parse()

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

Jak to obchodzimy?

Jak powiedziano wcześniej, do obsługi wyjątków zwykle potrzebujemy try..catch jak pokazano poniżej:

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

Ale używanie try..catch wszędzie nie będzie dobrą praktyką i mogą istnieć pewne scenariusze, w których chcieliśmy podać 0 jeśli dane wejściowe są niepoprawne (Jeśli zastosujemy powyższą metodę, musimy przypisać 0 do convertedInt z blokada). Aby obsłużyć takie scenariusze, możemy skorzystać ze specjalnej metody o nazwie .TryParse() .

.TryParse() metoda mający wewnętrzną obsługę wyjątku, który daje wyjście na out parametr i zwraca wartość logiczną wskazującą status konwersji ( true czy konwersja powiodła; false , jeśli nie udało). Na podstawie wartości zwracanej możemy ustalić status konwersji. Zobaczmy jeden przykład:

Zastosowanie 1: Zapisz wartość zwracaną w zmiennej boolowskiej

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

Możemy sprawdzić Zmienna isSuccessConversion po wykonaniu, aby sprawdzić status konwersji. Jeśli jest to fałsz, wówczas wartość convertedInt będzie wynosić 0 (nie trzeba sprawdzać wartości zwracanej, jeśli chcesz 0 dla niepowodzenia konwersji).

Zastosowanie 2: Sprawdź wartość zwracaną za pomocą if

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

Użycie 3: Bez sprawdzania wartości zwracanej możesz użyć następujących, jeśli nie zależy ci na wartości zwracanej (przekonwertowanej czy nie, 0 będzie w porządku)

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow