C# Language
Omgaan met FormatException bij het converteren van tekenreeksen naar andere typen
Zoeken…
Tekenreeks naar geheel getal omzetten
Er zijn verschillende methoden beschikbaar voor het expliciet omzetten van een string
naar een integer
, zoals:
Convert.ToInt16();
Convert.ToInt32();
Convert.ToInt64();
int.Parse();
Maar al deze methoden FormatException
een FormatException
als de invoertekenreeks niet-numerieke tekens bevat. Hiervoor moeten we een extra uitzonderingsbehandeling ( try..catch
) schrijven om ze in dergelijke gevallen te kunnen behandelen.
Uitleg met voorbeelden:
Dus laat onze input zijn:
string inputString = "10.2";
Voorbeeld 1: Convert.ToInt32()
int convertedInt = Convert.ToInt32(inputString); // Failed to Convert
// Throws an Exception "Input string was not in a correct format."
Opmerking: Hetzelfde geldt voor de andere genoemde methoden namelijk - Convert.ToInt16();
en Convert.ToInt64();
Voorbeeld 2: int.Parse()
int convertedInt = int.Parse(inputString); // Same result "Input string was not in a correct format.
Hoe omzeilen we dit?
Zoals eerder gezegd, hebben we meestal een try..catch
nodig om de uitzonderingen te verwerken, zoals hieronder wordt getoond:
try
{
string inputString = "10.2";
int convertedInt = int.Parse(inputString);
}
catch (Exception Ex)
{
//Display some message, that the conversion has failed.
}
Maar, met behulp van de try..catch
overal zal geen goede praktijk, en er kunnen een aantal scenario's waar we wilden geven 0
als de ingang is verkeerd, (Als we de bovenstaande methode volgen we moeten toewijzen 0
tot convertedInt
van de blok blokkeren). Om dergelijke scenario's te verwerken, kunnen we gebruik maken van een speciale methode genaamd. .TryParse()
.
De methode. .TryParse()
heeft een interne Exception-afhandeling, die u de uitvoer naar de parameter out
geeft en een Booleaanse waarde retourneert die de conversiestatus aangeeft ( true
als de conversie is geslaagd; false
als deze is mislukt). Op basis van de retourwaarde kunnen we de conversiestatus bepalen. Laten we een voorbeeld bekijken:
Gebruik 1: sla de retourwaarde op in een Booleaanse variabele
int convertedInt; // Be the required integer
bool isSuccessConversion = int.TryParse(inputString, out convertedInt);
We kunnen de variabele isSuccessConversion
na de uitvoering om de conversiestatus te controleren. Als het onwaar is, is de waarde van convertedInt
0
(u hoeft de retourwaarde niet te controleren als u 0
wilt dat de conversie mislukt).
Gebruik 2: controleer de retourwaarde met if
if (int.TryParse(inputString, out convertedInt))
{
// convertedInt will have the converted value
// Proceed with that
}
else
{
// Display an error message
}
Gebruik 3: zonder de retourwaarde aan te vinken, kunt u het volgende gebruiken, als u niet geïnteresseerd bent in de retourwaarde (geconverteerd of niet, 0
is goed)
int.TryParse(inputString, out convertedInt);
// use the value of convertedInt
// But it will be 0 if not converted