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

Jazyk C# poskytuje řadu operátorů. Mnohé z nich jsou podporovány integrovanými typy a umožňují provádět základní operace s hodnotami těchto typů. Tyto operátory zahrnují následující skupiny:

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

Nejjednodušší výrazy jazyka C# jsou literály (například celočíselné a reálné číslo) a názvy proměnných. Můžete je kombinovat do složitých výrazů pomocí operátorů. Priorita operátorů a asociativita určují pořadí, ve kterém se provádí operace ve výrazu. Pomocí závorek můžete změnit pořadí vyhodnocování stanovené prioritou operátoru a asociativita.

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 generuje výsledek a může být zahrnut do jiného výrazu. voidVolání metody je příklad výrazu, který neprodukuje 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é poskytuje jazyk C#:

  • Interpolované řetězcové výrazy , které poskytují pohodlný Syntax 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áření anonymních funkcí:

    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žití možností 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 finalizační metody.

Priorita operátorů

Ve výrazu s více operátory jsou operátory s vyšší prioritou vyhodnocovány před operátory s nižší prioritou. V následujícím příkladu je násobení provedeno jako první, protože má vyšší prioritu než přidání:

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

Chcete-li změnit pořadí vyhodnocování stanovené předností operátorů, použijte závorky:

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

V následující tabulce jsou uvedeny operátory jazyka C# začínající nejvyšší prioritou až nejnižší. Operátory v rámci jednotlivých řádků mají stejnou prioritu.

Operátory Kategorie nebo název
x. y, f (x), [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
přepínač s switch``withvýrazy a
x * y, x/y, x% y Multiplikativní
x + y, x – y Aditivní
x << y, x >> y Posouvá
x < y, x > y, x <= y, x > = y, je, jako Relační testování a testování typu
x = = y, x! = y Rovnost
x & y Logická logický operátor and nebo BITOVÝ logický operátor and
x ^ y Logická logická hodnota XOR nebo bitový logický operátor XOR
x | y Logická nebo logická logická hodnota nebo
x && y Podmiňovací operátor AND
x || y Podmiňovací operátor OR
x?? požadované Operátor slučování null
r? 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, => Přiřazení a deklarace lambda

Operátor asociativita

Pokud mají operátory stejnou prioritu, asociativita operátor určuje pořadí, ve kterém jsou operace provedeny:

  • Operátory asociativní zleva jsou vyhodnocovány v pořadí zleva doprava. S výjimkou operátorů přiřazení a operátorů slučování nulljsou všechny binární operátory asociativní. Například a + b - c je vyhodnocen jako (a + b) - c .
  • Operátory asociativní zprava jsou vyhodnocovány v pořadí zprava doleva. Operátory přiřazení, operátory slučování null a podmíněný operátor ?: jsou asociativní zprava. Například x = y = z je vyhodnocen jako x = (y = z) .

Pomocí závorek změňte pořadí hodnocení, které je asociativita operátorem:

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

Vyhodnocení operandu

Nesouvisí s prioritou operátorů a asociativita, jsou operandy ve výrazu vyhodnocovány zleva doprava. Následující příklady ukazují pořadí, ve kterém jsou operátory a operandy vyhodnocovány:

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 jsou vyhodnocovány všechny operandy operátoru. Některé operátory však vyhodnocuje operandy podmíněně. To znamená, že hodnota operandu úplně vlevo takového operátoru definuje, zda má být vyhodnocen (nebo které) jiné operandy. Tyto operátory jsou podmínkou podmíněného logického operátoru and ( && ) a OR ( || ) , operátory sloučení s hodnotou null ?? a ??= operátory ?. ?[] s hodnotou null a podmíněný operátor ?: . Další informace naleznete v popisu každého operátoru.

specifikace jazyka C#

Další informace naleznete v následujících oddílech specifikace jazyka C#:

Viz také