Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
C# innehåller ett antal operatorer. Många av dem stöds av de inbyggda typerna och gör att du kan utföra grundläggande åtgärder med värden av dessa typer. Dessa operatorer innehåller följande grupper:
- Aritmetiska operatorer som utför aritmetiska åtgärder med numeriska operander
- Jämförelseoperatorer som jämför numeriska operander
-
Booleska logiska operatorer som utför logiska åtgärder med
booloperander - Bitvis och skiftoperatorer som utför bitvis eller skiftåtgärder med operander av integraltyperna
- Likhetsoperatorer som kontrollerar om deras operander är lika med eller inte
Normalt kan du överbelasta dessa operatorer, det vill ex. ange operatorbeteendet för operanderna av en användardefinierad typ.
De enklaste C#-uttrycken är literaler (till exempel heltal och riktiga tal) och namn på variabler. Du kan kombinera dem i komplexa uttryck med hjälp av operatorer. Operatorprioritet och associativitet avgör i vilken ordning åtgärderna i ett uttryck utförs. Du kan använda parenteser för att ändra ordningen på utvärderingen som har införts av operatorprioritet och associativitet.
I följande kod finns exempel på uttryck till höger om tilldelningar:
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);
Vanligtvis ger ett uttryck ett resultat och kan inkluderas i ett annat uttryck. Ett void metodanrop är ett exempel på ett uttryck som inte ger något resultat. Det kan endast användas som en instruktion, som följande exempel visar:
Console.WriteLine("Hello, world!");
Här är några andra typer av uttryck som C# tillhandahåller:
Interpolerade stränguttryck som ger praktisk syntax för att skapa formaterade strängar:
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-uttryck som gör att du kan skapa anonyma funktioner:
int[] numbers = { 2, 3, 4, 5 }; var maximumSquare = numbers.Max(x => x * x); Console.WriteLine(maximumSquare); // Output: // 25Frågeuttryck som gör att du kan använda frågefunktioner direkt i 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
Du kan använda en uttryckstextdefinition för att ge en kortfattad definition för en metod, konstruktor, egenskap, indexerare eller slutförare.
Operatorpriorence
I ett uttryck med flera operatorer utvärderas operatorerna med högre prioritet före operatorerna med lägre prioritet. I följande exempel utförs multiplikationen först eftersom den har högre prioritet än addition:
var a = 2 + 2 * 2;
Console.WriteLine(a); // output: 6
Använd parenteser för att ändra den utvärderingsordning som har införts av operatorprioriteten:
var a = (2 + 2) * 2;
Console.WriteLine(a); // output: 8
I följande tabell visas de C#-operatorer som börjar med den högsta prioriteten till den lägsta. Operatorerna inom varje rad har samma prioritet.
| Operatörer | Kategori eller namn |
|---|---|
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är |
| +x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true och false | Unär |
| x..y | Räckvidd |
| växel, med |
switch- och with-uttryck |
| x * y, x / y, x % y | Multiplikativ |
| x + y, x – y | Tillsats |
| x << y, x >> y, x >>> y | Skifta |
| x < y, x > y, x <= y, x >= y, är, som | Relations- och typtestning |
| x == y, x != y | Jämlikhet |
x & y |
Boolesk logisk AND eller bitvis logisk AND |
x ^ y |
Boolesk logisk XOR eller bitvis logisk XOR |
x | y |
Boolesk logisk ELLER eller bitvis logisk OR |
| x & y | Villkorsstyrd OCH |
| x || y | Villkorsstyrd ELLER |
| x ?? y | Operatorn Null-coalescing |
| c ? t : f | Villkorsstyrd operator |
| x = y, x += y, x -= y, x *= y, x /= y, x %= y, x &= y, x |= y, x ^= y, x <<= y, x >>= y, x >>>?? = y, => | Tilldelnings- och lambdadeklaration |
Information om prioriteten för logiska mönsterkombinatorer finns i avsnittet Prioritet och ordning för kontroll av logiska mönster i artikeln Mönster .
Operator associativitet
När operatorerna har samma prioritet avgör associativitet för operatorerna i vilken ordning åtgärderna utförs:
-
Vänster associativa operatorer utvärderas i ordning från vänster till höger. Förutom tilldelningsoperatorerna och operatorerna null-coalescing är alla binära operatorer vänster-associativa. Till exempel
a + b - cutvärderas som(a + b) - c. -
Höger associativa operatorer utvärderas i ordning från höger till vänster. Tilldelningsoperatorerna, operatorerna null-coalescing, lambdas och den villkorsstyrda operatorn
?:är rätt associativa. Till exempelx = y = zutvärderas somx = (y = z).
Viktigt!
I ett uttryck för formuläret P?.A0?.A1, om P är null, A0 varken eller A1 utvärderas. På samma sätt, i ett uttryck för formuläret P?.A0.A1, eftersom A0 inte utvärderas när P är null, är A0.A1inte heller . Mer information finns i C#-språkspecifikationen .
Använd parenteser för att ändra utvärderingsordningen som införts av operatorns associativitet:
int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}"); // output: a = 1, b = 6
Operandutvärdering
Operander i ett uttryck är inte relaterade till operatorprioritet och associativitet och utvärderas från vänster till höger. Följande exempel visar i vilken ordning operatorer och operander utvärderas:
| Uttryck | Utvärderingsordning |
|---|---|
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, * |
Normalt utvärderas alla operatoroperatorer. Vissa operatorer utvärderar dock operander villkorligt. Det innebär att värdet för den vänstra operanden för en sådan operator definierar om (eller vilka) andra operander ska utvärderas. Dessa operatorer är de villkorsstyrda logiska OPERATORERNA AND (&&) och OR (||),null-coalescing-operatorerna ?? och ??=, de null-villkorsstyrda operatorerna ?. och ?[], och den villkorsstyrda operatorn ?:. Mer information finns i beskrivningen av varje operator.
Språkspecifikation för C#
Mer information finns i följande avsnitt i C#-språkspecifikationen: