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