Megosztás:


C# operátorok és kifejezések

A C# számos operátort biztosít. A beépített típusok számos operátort támogatnak, így alapműveleteket hajthat végre az ilyen típusú értékekkel.

A C# nyelv referenciadokumentuma a C# nyelv legújabb kiadású verzióját ismerteti. Emellett a közelgő nyelvi kiadás nyilvános előzetes verziójú funkcióinak kezdeti dokumentációját is tartalmazza.

A dokumentáció azonosítja azokat a funkciókat, amelyeket először a nyelv utolsó három verziójában vagy az aktuális nyilvános előzetes verziókban vezetnek be.

Jótanács

Ha meg szeretné tudni, hogy mikor jelent meg először egy funkció a C#-ban, tekintse meg a C# nyelvi verzióelőzményeiről szóló cikket.

Ezek az operátorok a következő csoportokat tartalmazzák:

Ezek az operátorok általában túlterhelhetők . Egy operátor túlterhelésével megadhatja a felhasználó által megadott típusú operandusok operátori viselkedését.

A legegyszerűbb C#-kifejezések a literálok (például egész számok és valós számok) és a változók nevei. Operátorok használatával összetett kifejezésekké egyesítheti őket. Az operátorok elsőbbsége és az asszociativitás határozza meg a kifejezések műveleteinek sorrendjét. Zárójelek használatával módosíthatja az operátorok elsőbbsége és az asszociativitás által előírt kiértékelési sorrendet.

A következő kódban a hozzárendelések jobb oldalán jelennek meg kifejezések:

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);

A kifejezések általában eredményt adnak, és egy másik kifejezésben is szerepelhetnek. A void metódushívás egy olyan kifejezés példája, amely nem hoz létre eredményt. Csak utasításként használható, ahogy az alábbi példa is mutatja:

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

Íme néhány más kifejezés, amelyet a C# biztosít:

  • Interpolált sztringkifejezések , amelyek kényelmes szintaxist biztosítanak formázott sztringek létrehozásához:

    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.
    
  • Lambda-kifejezések , amelyek lehetővé teszik névtelen függvények létrehozását:

    int[] numbers = { 2, 3, 4, 5 };
    var maximumSquare = numbers.Max(x => x * x);
    Console.WriteLine(maximumSquare);
    // Output:
    // 25
    
  • Olyan lekérdezési kifejezések , amelyek lehetővé teszik a lekérdezési képességek közvetlen használatát a C#-ban:

    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
    

A kifejezés törzsdefiníciója segítségével tömör definíciót adhat meg egy metódushoz, konstruktorhoz, tulajdonsághoz, indexelőhöz vagy véglegesítőhöz.

Operátorok elsőbbsége

A több operátort tartalmazó kifejezésekben a nagyobb elsőbbséget élvező operátorok kiértékelése az alacsonyabb elsőbbséget élvező operátorok előtt történik. A következő példában először a szorzást hajtja végre a rendszer, mert nagyobb elsőbbséget élvez, mint az összeadás:

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

Zárójelek használatával módosíthatja az operátorok elsőbbsége által előírt kiértékelési sorrendet:

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

Az alábbi táblázat a C#-operátorokat sorolja fel, amelyek a legmagasabb prioritással és a legalacsonyabb előzményekkel kezdődnek. Az egyes sorokban lévő operátorok azonos elsőbbséget élveznek.

Működtetők Kategória vagy név
x.y, f(x), a[i], x?.y, xx?[y]++, x--, x!, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x-y> Primary
+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true and false Unary
x..y Tartomány
kapcsolóval, switch és with kifejezések
x * y, x / y, x % y Többtényezős
x + y, x – y Adalékanyag
x << y, x >> y, x >>> y Műszak
x < y, x > y, x <= y, x >= y, is, as Relációs és típustesztelés
x == y, x != y Egyenlőség
x & y Logikai ÉS vagy bitenkénti logikai ÉS
x ^ y Logikai XOR vagy bitenkénti logikai XOR
x | y Logikai vagybitenkénti logikai VAGY
x &&; y Feltételes ÉS
x || Y Feltételes vagy
X?? y Null-szénerősítési operátor
C? t : f Feltételes 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, => Hozzárendelés és lambda deklaráció

A logikai minta-kombinátorok elsőbbségével kapcsolatos információkért tekintse meg a Minták cikk logikai minták ellenőrzésének elsőbbségi és ellenőrzési sorrendjét ismertető szakaszát.

Operátor-asszociativity

Ha az operátorok elsőbbsége azonos, az operátorok asszociativitása határozza meg a műveletek végrehajtásának sorrendjét:

  • A bal asszociatív operátorok kiértékelése balról jobbra haladva történik. A hozzárendelési operátorok és a null-szenesítő operátorok kivételével minden bináris operátor bal asszociatív. Például a a + b - c kiértékelés (a + b) - ca következőképpen történik: .
  • A jobb asszociatív operátorok kiértékelése jobbról balra haladva történik. A hozzárendelési operátorok, a null-szenesítő operátorok, a lambdas és a feltételes operátorok ?: jobb asszociatívak. Például a x = y = z kiértékelés x = (y = z)a következőképpen történik: .

Fontos

Az űrlap P?.A0?.A1kifejezésében – ha P igen null– egyik sem A0A1 lesz kiértékelve. Hasonlóképpen, az űrlap P?.A0.A1kifejezésében, mivel A0 a kiértékelése P nem null, és nem is az A0.A1. További részletekért tekintse meg a C#-nyelv specifikációját .

Zárójelek használatával módosíthatja az operátor-asszociativity által előírt kiértékelési sorrendet:

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

Operandus értékelése

Az operátorok elsőbbségétől és az asszociativitástól független kifejezés operandusait balról jobbra értékeli a rendszer. Az alábbi példák az operátorok és operandusok kiértékelésének sorrendjét mutatják be:

Expression Kiértékelési sorrend
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, *

Általában az összes operátoroperndus kiértékelése történik. Egyes operátorok azonban feltételesen értékelik ki az operandusokat. Ez a feltétel azt jelenti, hogy az ilyen operátor bal szélső operandusának értéke határozza meg, hogy más operandusokat kell-e (vagy melyiket) értékelni. Ezek az operátorok a feltételes logikai ÉS (&&) és OR (||) operátorok, a null-szenesítő operátorok??, ??=a null-feltételes operátorok és ?[]a feltételes operátorok ?.?:. További információkért tekintse meg az egyes operátorok leírását.

C# nyelvspecifikáció

További információt a C# nyelvspecifikációjának alábbi szakaszaiban talál:

Lásd még