Parse och TryParse

🌟 Introduktion

När användare matar in data i ditt program får du ofta textsträngar som måste konverteras till siffror. Till exempel när någon skriver “25” i en textruta och du behöver det som talet 25 för att räkna med det.

C-Sharp erbjuder två huvudsakliga sätt att göra denna konvertering: Parse och TryParse.

🎯 TL;DR

  • Parse: Konverterar text till siffra, kraschar om det misslyckas
  • TryParse: Försöker konvertera, returnerar true/false beroende på om det lyckades
  • Fungerar med int, double, long och andra numeriska typer

📋 Efter att ha läst detta kommer du att kunna

  • Använda Parse för att konvertera strängar till siffror
  • Förstå när Parse kraschar och varför
  • Använda TryParse för säker konvertering
  • Välja rätt metod för olika situationer
  • Hantera användarinput på ett säkert sätt

🔢 Parse - Den enkla vägen

int.Parse()


string userInput = "42";
int number = int.Parse(userInput);
Console.WriteLine($"Talet är: {number}"); // Utskrift: Talet är: 42

double.Parse()


string priceText = "19.99";
double price = double.Parse(priceText);
Console.WriteLine($"Priset är: {price} kr"); // Utskrift: Priset är: 19,99 kr

long.Parse()


string bigNumberText = "9876543210";
long bigNumber = long.Parse(bigNumberText);
Console.WriteLine($"Stort tal: {bigNumber}"); // Utskrift: Stort tal: 9876543210

⚠️ Problemet med Parse

Parse kraschar om konverteringen misslyckas:


// Detta kommer att krascha programmet!
string invalidInput = "abc";
int number = int.Parse(invalidInput); // 💥 System.FormatException!


// Detta kommer också att krascha!
string emptyInput = "";
int number = int.Parse(emptyInput); // 💥 System.ArgumentException!

Vanliga fel som får Parse att krascha:

  • Tom sträng ("")
  • Bokstäver istället för siffror ("abc")
  • För stora tal för datatypen
  • Felaktigt decimalformat ("19,99" i engelska kulturer)

🛡️ TryParse - Den säkra vägen

TryParse försöker konvertera utan att krascha. Den returnerar true om det lyckas, false om det misslyckas.

int.TryParse()


string userInput = "42";
int number;

if (int.TryParse(userInput, out number))
{
    Console.WriteLine($"Konvertering lyckades! Talet är: {number}");
}
else
{
    Console.WriteLine("Kunde inte konvertera till tal");
}

Modern syntax med TryParse (C-Sharp 7+)


string userInput = "42";

if (int.TryParse(userInput, out int number))
{
    Console.WriteLine($"Talet är: {number}");
}
else
{
    Console.WriteLine("Ogiltigt tal");
}

🚀 Praktiska exempel

Exempel 1: Säker användarinput


Console.WriteLine("Ange din ålder:");
string input = Console.ReadLine();

if (int.TryParse(input, out int age))
{
    if (age >= 18)
    {
        Console.WriteLine("Du är myndig!");
    }
    else
    {
        Console.WriteLine($"Du är {18 - age} år från att bli myndig");
    }
}
else
{
    Console.WriteLine("Vänligen ange en giltig ålder (endast siffror)");
}

Exempel 2: Prishantering med double


Console.WriteLine("Ange priset:");
string priceInput = Console.ReadLine();

if (double.TryParse(priceInput, out double price))
{
    double priceWithTax = price * 1.25; // Lägg till 25% moms
    Console.WriteLine($"Pris: {price:F2} kr");
    Console.WriteLine($"Pris med moms: {priceWithTax:F2} kr");
}
else
{
    Console.WriteLine("Ogiltigt prisformat. Använd siffror och kommatecken för decimaler.");
}

Exempel 3: Stora tal med long


Console.WriteLine("Ange antal bytes:");
string bytesInput = Console.ReadLine();

if (long.TryParse(bytesInput, out long bytes))
{
    double gigabytes = bytes / 1_000_000_000.0;
    Console.WriteLine($"{bytes} bytes = {gigabytes:F2} GB");
}
else
{
    Console.WriteLine("Ogiltigt antal bytes");
}

📊 Jämförelse: Parse vs TryParse

AspektParseTryParse
HastighetNågot snabbareNågot långsammare
SäkerhetKan kraschaKraschar aldrig
FelhanteringException kastasReturnerar false
AnvändningNär du är säker på inputNär input kan vara ogiltig
KodEnklare syntaxLite mer kod

🎯 Bästa praxis

✅ Använd Parse när:

  • Du är 100% säker på att strängen innehåller ett giltigt tal
  • Du läser från en fil eller databas där formatet är garanterat
  • Prestanda är kritisk och du hanterar exceptions på högre nivå

// Säker användning av Parse
string configValue = "1000"; // Från konfigurationsfil
int maxUsers = int.Parse(configValue);

✅ Använd TryParse när:

  • Du hanterar användarinput
  • Strängen kan innehålla ogiltiga värden
  • Du vill undvika exceptions

// Säker hantering av användarinput
if (int.TryParse(Console.ReadLine(), out int value))
{
    // Arbeta med value
}

🌍 Kulturspecifika problem

Decimaltecken varierar mellan länder:


// I Sverige använder vi komma
string swedishPrice = "19,99";

// I USA/UK använder de punkt
string englishPrice = "19.99";

// Båda fungerar i C-Sharp på svenska system
if (double.TryParse(swedishPrice, out double price1))
{
    Console.WriteLine($"Svenskt pris: {price1}"); // Fungerar
}

if (double.TryParse(englishPrice, out double price2))
{
    Console.WriteLine($"Engelskt pris: {price2}"); // Fungerar också
}

🔧 Avancerade tekniker

Standardvärden med TryParse


string input = Console.ReadLine();
int number = int.TryParse(input, out int result) ? result : 0;

// Eller med null-coalescing operator
int safeNumber = int.TryParse(input, out int parsed) ? parsed : -1;

Validering med intervall


string ageInput = Console.ReadLine();

if (int.TryParse(ageInput, out int age) && age >= 0 && age <= 120)
{
    Console.WriteLine($"Giltig ålder: {age}");
}
else
{
    Console.WriteLine("Ange en ålder mellan 0 och 120");
}

🚫 Vanliga misstag

Misstag 1: Glömma hantera TryParse resultat


// ❌ FEL - Kontrollerar inte om konverteringen lyckades
int.TryParse(input, out int number);
Console.WriteLine(number); // number kan vara 0 även om konvertering misslyckades

// ✅ RÄTT - Kontrollera alltid resultatet
if (int.TryParse(input, out int number))
{
    Console.WriteLine(number);
}

Misstag 2: Använda Parse på osäker input


// ❌ FEL - Kan krascha
string userInput = Console.ReadLine();
int age = int.Parse(userInput);

// ✅ RÄTT - Säker hantering
if (int.TryParse(userInput, out int age))
{
    // Säker att använda age här
}

📚 Sammanfattning

Parse:

  • Snabb och enkel
  • Kraschar vid fel
  • Bäst för garanterat giltiga strängar

TryParse:

  • Säker och pålitlig
  • Returnerar true/false
  • Bäst för användarinput

Rekommendation: Använd TryParse som standard, särskilt när du hanterar data från användare eller externa källor.

🔗 Relaterade ämnen

😄 Obligatorisk dad joke

Varför gillar programmerare TryParse?

För att det aldrig kastar sig över problem! 🎭


Upp

Upp


Licens: Apache 2.0 | © 2023 Marcus Medina, Campus Mölndal. Alla rättigheter förbehållna.
Du får använda och modifiera detta verk enligt villkoren i Apache License, Version 2.0. Du får inte använda detta verk för kommersiella ändamål utan tillstånd från upphovsmannen.