Sök…


Konvertera sträng till heltal

Det finns olika metoder för att uttryckligen konvertera en string till ett integer , till exempel:

  1. Convert.ToInt16();

  2. Convert.ToInt32();

  3. Convert.ToInt64();

  4. 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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow