Sdílet prostřednictvím


Operátory a výrazy v C#

Jazyk C# poskytuje mnoho operátorů. Předdefinované typy podporují mnoho z těchto operátorů, takže můžete provádět základní operace s hodnotami těchto typů.

Referenční dokumentace jazyka C# dokumentuje naposledy vydané verze jazyka C#. Obsahuje také počáteční dokumentaci k funkcím ve verzi Public Preview pro nadcházející jazykovou verzi.

Dokumentace identifikuje všechny funkce, které byly poprvé představeny v posledních třech verzích jazyka nebo v aktuálních verzích Public Preview.

Návod

Informace o tom, kdy byla funkce poprvé představena v jazyce C#, najdete v článku o historii verzí jazyka C#.

Mezi tyto operátory patří následující skupiny:

Obvykle můžete tyto operátory přetížit . Přetížením operátoru určíte 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 zkombinovat do složitých výrazů. Priorita operátoru a asociativita určují pořadí, ve kterém se operace ve výrazu provádějí. Pomocí závorek můžete změnit pořadí vyhodnocení uložené podle priority operátoru a asociativity.

V následujícím kódu se příklady výrazů zobrazují 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];

List<int> numbers = [..collection];
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#:

    int[] scores = { 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é 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átoři 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 Rozmezí
s přepínačems výrazy switch a with
x * y, x / y, x % y Multiplikativní
x + y, x – y Aditivní
x << y, x >> y, x >>> y Směna
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á hodnota OR nebo bitový logický operátor OR
x & y Podmíněný operátor AND
x || Y Podmíněné 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, x >>>?? = y, => Deklarace přiřazení a lambda

Informace o prioritě kombinátorů logických vzorů naleznete v části Priorita a pořadí kontroly logických vzorů v článku Vzory .

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 zleva doprava se vyhodnocují v pořadí. S výjimkou operátorů přiřazení a operátorů nulového spojování jsou všechny binární operátory asociativní. Například a + b - c se vyhodnotí jako (a + b) - c.
  • Operátory asociativní zprava 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).

Důležité

Ve výrazu formuláře P?.A0?.A1, pokud P je null, ani A0A1 nejsou vyhodnoceny. Podobně ve výrazu formuláře P?.A0.A1, protože A0 není vyhodnocen, pokud P je null, ani není A0.A1. Další podrobnosti najdete ve specifikaci jazyka C# .

Pomocí závorek změňte 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átorů a asociativitou se operandy ve výrazu 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ě. Tato podmínka znamená, že hodnota levého operandu takového operátoru definuje, zda (nebo které) jiné operandy mají být vyhodnoceny. Tyto operátory jsou podmíněné logické operátory AND () a OR (&&||),operátory ?? null-coalescing a ??=, operátory s podmínkou ?. null a ?[]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é