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