Ce face Operatorul condițional ?:
Operatorul ternar ?: este forma scurtă a unui if/else care produce o valoare. Se evaluează doar ramura aleasă, iar cele două ramuri trebuie să aibă un tip comun (sau unul să se poată converti în celălalt).
E potrivit pentru alegeri simple, de exemplu un text la singular sau plural. Pentru mai mult de două variante, o expresie switch e mai clară decât operatori ?: imbricați.
Parametri
| Parametru | Descriere |
|---|---|
conditie |
Expresie bool. |
valoareDacaTrue |
Valoarea întregii expresii când condiția este adevărată. |
valoareDacaFalse |
Valoarea când condiția este falsă. |
Ce returnează
Una dintre cele două valori, cu tipul lor comun.
Exemple
Exemplul 1: Singular sau plural
foreach (int n in new[] { 1, 2, 20 })
{
string text = n == 1 ? "produs" : "produse";
Console.WriteLine($"{n} {text}");
}
Rezultat
1 produs
2 produse
20 produse
Exemplul 2: Transport gratuit peste un prag
Expresia poate sta direct într-un șir interpolat, între paranteze.
int[] comenzi = [150, 249, 250];
foreach (int total in comenzi)
{
int transport = total >= 250 ? 0 : 19;
Console.WriteLine($"Comandă {total} lei, transport {(transport == 0 ? "gratuit" : transport + " lei")}");
}
Rezultat
Comandă 150 lei, transport 19 lei
Comandă 249 lei, transport 19 lei
Comandă 250 lei, transport gratuit
Greșeli frecvente
- Într-un șir interpolat,
$"{a ? b : c}"nu se compilează, pentru că:marchează începutul formatului. Pune expresia între paranteze:{(a ? b : c)}. - Ramuri cu tipuri fără conversie comună (de exemplu
intșistring) dau eroare de compilare. Convertește explicit una dintre ele.
Comenzi înrudite
if / else if / else: Execută un bloc de cod doar când o condiție de tip bool este adevărată, cu ramuri alternative else if și else.