Operátory a výrazy jazyka C# (referenční dokumentace jazyka C#)

Jazyk C# poskytuje řadu operátorů. Mnoho z nich podporuje předdefinované typy a umožňuje provádět základní operace s hodnotami těchto typů. Mezi tyto operátory patří následující skupiny:

Obvykle můžete tyto operátory přetížit , tj. určit chování operátoru pro operandy uživatelem definovaného typu.

Nejjednodušší výrazy jazyka C# jsou literály (například celé číslo a reálná čísla) a názvy proměnných. Pomocí operátorů je můžete kombinovat do komplexních výrazů. Priorita operátoru a asociativita určují pořadí provádění operací ve výrazu. Pomocí závorek můžete změnit pořadí vyhodnocení uloženého podle priority operátoru a asociativity.

V následujícím kódu jsou příklady výrazů na pravé straně přiřazení:

int a, b, c;
a = 7;
b = a;
c = b++;
b = a + b * c;
c = a >= 100 ? b : c / 10;
a = (int)Math.Sqrt(b * b + c * c);

string s = "String literal";
char l = s[s.Length - 1];

var numbers = new List<int>(new[] { 1, 2, 3 });
b = numbers.FindLast(n => n > 1);

Výraz obvykle vytvoří výsledek a může být zahrnut do jiného výrazu. Volání void metody je příkladem výrazu, který nevygeneruje výsledek. Dá se použít jenom jako příkaz, jak ukazuje následující příklad:

Console.WriteLine("Hello, world!");

Tady jsou některé další druhy výrazů, které jazyk C# poskytuje:

  • Interpolované řetězcové výrazy , které poskytují pohodlnou syntaxi pro vytváření formátovaných řetězců:

    var r = 2.3;
    var message = $"The area of a circle with radius {r} is {Math.PI * r * r:F3}.";
    Console.WriteLine(message);
    // Output:
    // The area of a circle with radius 2.3 is 16.619.
    
  • Výrazy lambda , které umožňují vytvářet anonymní funkce:

    int[] numbers = { 2, 3, 4, 5 };
    var maximumSquare = numbers.Max(x => x * x);
    Console.WriteLine(maximumSquare);
    // Output:
    // 25
    
  • Výrazy dotazů , které umožňují používat možnosti dotazů přímo v jazyce C#:

    var scores = new[] { 90, 97, 78, 68, 85 };
    IEnumerable<int> highScoresQuery =
        from score in scores
        where score > 80
        orderby score descending
        select score;
    Console.WriteLine(string.Join(" ", highScoresQuery));
    // Output:
    // 97 90 85
    

Definici těla výrazu můžete použít k poskytnutí stručné definice metody, konstruktoru, vlastnosti, indexeru nebo finalizátoru.

Priorita operátorů

Ve výrazu s více operátory se operátory s vyšší prioritou vyhodnocují před operátory s nižší prioritou. V následujícím příkladu se násobení provede jako první, protože má vyšší prioritu než sčítání:

var a = 2 + 2 * 2;
Console.WriteLine(a); //  output: 6

Pomocí závorek můžete změnit pořadí vyhodnocení uloženého podle priority operátoru:

var a = (2 + 2) * 2;
Console.WriteLine(a); //  output: 8

Následující tabulka uvádí operátory jazyka C# začínající nejvyšší prioritou na nejnižší. Operátory v každém řádku mají stejnou prioritu.

Operátory Kategorie nebo název
x.y, f(x), a[i], x?.y, , x?[y]x++, x--, x!, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x-y> Primární
+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true a false Unární
x..y Rozsah
s přepínačem, s switch výrazy a with výrazy
x * y, x / y, x % y Multiplikativní
x + y, x – y Aditivní
x << y, x >> y Shift
x < y, x > y, x <= y, x >= y, is, as Relační a typové testování
x == y, x != y Rovnost
x & y Logický logický operátor AND nebo bitový logický operátor AND
x ^ y Logické logické XOR nebo bitové logické XOR
x | y Logický logický operátor OR nebo bitový logický operátor OR
x && y Podmiňovací operátor AND
x || Y Podmiňovací operátor OR
X?? y Operátor nulového sjednocení
C? t : f Podmíněný operátor
x = y, x += y, x -= y, x *= y, x /= y, x %= y, x &= y, x |= y, x ^= y, x <<= y, x >>= y, x = y, x ?? = y, => Deklarace přiřazení a lambda

Asociativita operátoru

Pokud mají operátory stejnou prioritu, asociativita operátorů určuje pořadí, ve kterém se operace provádějí:

  • Asociativní operátory vlevo se vyhodnocují v pořadí zleva doprava. S výjimkou operátorů přiřazení a operátorů s hodnotou null-coalescing jsou všechny binární operátory asociativní. Například a + b - c se vyhodnotí jako (a + b) - c.
  • Asociativní operátory se vyhodnocují v pořadí zprava doleva. Operátory přiřazení, operátory nulového sjednocení, lambda a podmíněný operátor ?: jsou asociativní. Například x = y = z se vyhodnotí jako x = (y = z).

Pomocí závorek můžete změnit pořadí vyhodnocení uložené operátorem asociativity:

int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}");  // output: a = 1, b = 6

Vyhodnocení operandu

Nesouvisející s prioritou operátoru a asociativitou, operandy ve výrazu se vyhodnocují zleva doprava. Následující příklady ukazují pořadí, ve kterém se vyhodnocují operátory a operandy:

Výraz Pořadí vyhodnocování
a + b a, b, +
a + b * c a, b, c, *, +
a / b + c * d a, b, /, c, d, *, +
a / (b + c) * d a, b, c, +, /, d, *

Obvykle se vyhodnocují všechny operandy operátoru. Některé operátory však vyhodnocují operandy podmíněně. To znamená, že hodnota levého operandu takového operátoru definuje, jestli (nebo které) jiné operandy mají být vyhodnoceny. Tyto operátory jsou podmíněné logické operátory AND (&&) a OR (||), operátory nulového sjednocení ?? a ??=operátory ?. s podmínkou null a ?[]podmíněnýoperátor ?:. Další informace najdete v popisu jednotlivých operátorů.

specifikace jazyka C#

Další informace najdete v následujících částech specifikace jazyka C#:

Viz také