C# Language
Hantera FormatException vid konvertering av sträng till andra typer
Sök…
Konvertera sträng till heltal
Det finns olika metoder för att uttryckligen konvertera en string till ett integer , till exempel:
Convert.ToInt16();Convert.ToInt32();Convert.ToInt64();int.Parse();
Men alla dessa metoder kastar en FormatException om ingångssträngen innehåller icke-numeriska tecken. För detta måste vi skriva en extra undantagshantering ( try..catch ) för att hantera dem i sådana fall.
Förklaring med exempel:
Så låt våra bidrag vara:
string inputString = "10.2";
Exempel 1: Convert.ToInt32()
int convertedInt = Convert.ToInt32(inputString); // Failed to Convert
// Throws an Exception "Input string was not in a correct format."
Obs: Samma sak gäller de andra nämnda metoderna nämligen - Convert.ToInt16(); och Convert.ToInt64();
Exempel 2: int.Parse()
int convertedInt = int.Parse(inputString); // Same result "Input string was not in a correct format.
Hur kringgår vi detta?
Som tidigare try..catch , för att hantera undantagen behöver vi vanligtvis ett try..catch som visas nedan:
try
{
string inputString = "10.2";
int convertedInt = int.Parse(inputString);
}
catch (Exception Ex)
{
//Display some message, that the conversion has failed.
}
Men att använda try..catch överallt kommer inte att vara bra praxis, och det kan finnas några scenarier där vi ville ge 0 om ingången är fel, (Om vi följer metoden ovan måste vi tilldela 0 till convertedInt från fångst block). För att hantera sådana scenarier kan vi använda en speciell metod som heter .TryParse() .
.TryParse() med en intern hantering av undantag, vilket ger dig utdata till out parametern och returnerar ett booleskt värde som anger konverteringsstatus ( true om konverteringen var framgångsrik; false om den misslyckades). Baserat på returvärdet kan vi bestämma konverteringsstatusen. Låt oss se ett exempel:
Användning 1: Lagra returvärdet i en boolesisk variabel
int convertedInt; // Be the required integer
bool isSuccessConversion = int.TryParse(inputString, out convertedInt);
Vi kan kontrollera variabeln isSuccessConversion efter exekveringen för att kontrollera omvandlingsstatusen. Om det är falskt är värdet på convertedInt intet 0 (inget behov av att kontrollera returvärdet om du vill ha 0 för konverteringsfel).
Användning 2: Kontrollera returvärdet med if
if (int.TryParse(inputString, out convertedInt))
{
// convertedInt will have the converted value
// Proceed with that
}
else
{
// Display an error message
}
Användning 3: Utan att kontrollera returvärdet kan du använda följande, om du inte bryr dig om returvärdet (konverterat eller inte, kommer 0 att vara ok)
int.TryParse(inputString, out convertedInt);
// use the value of convertedInt
// But it will be 0 if not converted