Operatorul condițional ?: în C# (.NET)

Alege între două valori în funcție de o condiție, într-o singură expresie: conditie ? a : b.

Sintaxă C#
var rezultat = conditie ? valoareDacaTrue : valoareDacaFalse;

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 și string) 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.