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