C# Language
Obsługa wyjątku formatu podczas konwertowania łańcucha znaków na inne typy
Szukaj…
Konwertowanie ciągu na liczbę całkowitą
Dostępne są różne metody jawnego konwertowania string na integer , takie jak:
Convert.ToInt16();Convert.ToInt32();Convert.ToInt64();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