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.Parsepe text introdus de utilizator oprește programul la prima greșeală de tastare. FoloseșteTryParse.double.Parse("3.5")pe un sistem cu culturaro-ROdă 35, nu 3,5, pentru că punctul este separatorul de mii. Dă cultura explicit.Convert.ToInt32(null)întoarce 0, iarint.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.