int.Parse și int.TryParse în C# (.NET)

Bazele limbajului și I/O .NET Framework 2.0 (TryParse)

Transformă text în număr: Parse aruncă excepție la text invalid, TryParse returnează false și nu aruncă.

Sintaxă C#
int n = int.Parse(text);   bool ok = int.TryParse(text, out int n);

Ce face int.Parse și int.TryParse

int.Parse convertește un șir în int și aruncă FormatException dacă textul nu e număr, respectiv OverflowException dacă depășește domeniul. Folosește-l doar când textul sigur e valid.

int.TryParse întoarce true sau false și pune numărul în parametrul out (0 la eșec). E varianta potrivită pentru date de la utilizator sau din fișiere. Toate tipurile numerice au aceeași pereche: long, double, decimal, plus DateTime, Guid și altele.

Pentru numere cu zecimale contează cultura: în română separatorul zecimal este virgula. Dă explicit CultureInfo când formatul este fix, de exemplu CultureInfo.InvariantCulture pentru date din fișiere CSV cu punct.

Parametri

Parametru Descriere
s Textul de convertit. Spațiile de la capete sunt acceptate.
result (out) La TryParse: valoarea convertită sau 0.
provider Opțional: IFormatProvider, de obicei CultureInfo.

Ce returnează

Parse: numărul. TryParse: bool care spune dacă a reușit.

Exemple

Exemplul 1: TryParse pe date de la utilizator

string[] intrari = ["42", " 7 ", "3.5", "abc", "99999999999"];

foreach (string text in intrari)
{
    if (int.TryParse(text, out int n))
        Console.WriteLine($"'{text}' -> {n}");
    else
        Console.WriteLine($"'{text}' nu este int");
}

Rezultat

'42' -> 42
' 7 ' -> 7
'3.5' nu este int
'abc' nu este int
'99999999999' nu este int

Exemplul 2: Parse cu tratarea excepției și cultură explicită

Același text "12,5" înseamnă 12,5 în română, dar 125 în engleză (virgula e separator de mii acolo).

using System.Globalization;

try
{
    int n = int.Parse("doi");
}
catch (FormatException)
{
    Console.WriteLine("Textul nu este un număr");
}

decimal ro = decimal.Parse("12,5", new CultureInfo("ro-RO"));
decimal en = decimal.Parse("12,5", CultureInfo.InvariantCulture);
Console.WriteLine(ro * 2 == 25);
Console.WriteLine(en);

Rezultat

Textul nu este un număr
True
125

Greșeli frecvente

  • int.Parse pe text introdus de utilizator oprește programul la prima greșeală de tastare. Folosește TryParse.
  • double.Parse("3.5") pe un sistem cu cultura ro-RO dă 35, nu 3,5, pentru că punctul este separatorul de mii. Dă cultura explicit.
  • Convert.ToInt32(null) întoarce 0, iar int.Parse(null) aruncă ArgumentNullException: cele două nu se comportă la fel.

Comenzi înrudite

  • ref, out și in: Transmit un argument prin referință: ref îl poate citi și modifica, out trebuie setat de metodă, in este doar pentru citire.
  • Formatarea numerelor și string.Format: Specificatori de format (N2, F1, D5, X) și aliniere în string.Format, ToString și șiruri interpolate, cu cultura ro-RO.
  • while și do-while: Repetă un bloc cât timp o condiție e adevărată; do-while execută blocul cel puțin o dată înainte de verificare.