Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
C# biedt een aantal operators. Veel van deze typen worden ondersteund door de ingebouwde typen en bieden u de mogelijkheid om basisbewerkingen uit te voeren met waarden van deze typen. Deze operators omvatten de volgende groepen:
- Rekenkundige operators die rekenkundige bewerkingen uitvoeren met numerieke operanden
- Vergelijkingsoperatoren die numerieke operanden vergelijken
-
Booleaanse logische operators die logische bewerkingen uitvoeren met
bool
operanden - Bitwise- en shiftoperators die bitwise - of shiftbewerkingen uitvoeren met operanden van de integrale typen
- Gelijkheidsoperatoren die controleren of hun operanden gelijk zijn of niet
Normaal gesproken kunt u deze operators overbelasten , dat wil gezegd, het gedrag van de operator opgeven voor de operanden van een door de gebruiker gedefinieerd type.
De eenvoudigste C#-expressies zijn letterlijke waarden (bijvoorbeeld gehele getallen en reële getallen) en namen van variabelen. U kunt deze combineren in complexe expressies met behulp van operators. Operatorprioriteit en associativiteit bepalen de volgorde waarin de bewerkingen in een expressie worden uitgevoerd. U kunt haakjes gebruiken om de volgorde van de evaluatie te wijzigen die wordt opgelegd door de prioriteit van de operator en de associativiteit.
In de volgende code staan voorbeelden van expressies aan de rechterkant van toewijzingen:
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);
Normaal gesproken produceert een expressie een resultaat en kan deze worden opgenomen in een andere expressie. Een void
methodeaanroep is een voorbeeld van een expressie die geen resultaat oplevert. Deze kan alleen als instructie worden gebruikt, zoals in het volgende voorbeeld wordt weergegeven:
Console.WriteLine("Hello, world!");
Hier volgen enkele andere soorten expressies die C# biedt:
Geïnterpoleerde tekenreeksexpressies die handige syntaxis bieden voor het maken van opgemaakte tekenreeksen:
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-expressies waarmee u anonieme functies kunt maken:
int[] numbers = { 2, 3, 4, 5 }; var maximumSquare = numbers.Max(x => x * x); Console.WriteLine(maximumSquare); // Output: // 25
Query-expressies waarmee u querymogelijkheden rechtstreeks in C# kunt gebruiken:
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
U kunt een definitie van de expressietekst gebruiken om een beknopte definitie te bieden voor een methode, constructor, eigenschap, indexeerfunctie of finalizer.
Operatorprioriteit
In een expressie met meerdere operators worden de operators met een hogere prioriteit geëvalueerd voordat de operators een lagere prioriteit hebben. In het volgende voorbeeld wordt de vermenigvuldiging eerst uitgevoerd omdat deze een hogere prioriteit heeft dan optellen:
var a = 2 + 2 * 2;
Console.WriteLine(a); // output: 6
Gebruik haakjes om de volgorde van evaluatie te wijzigen die wordt opgelegd door operatorprioriteit:
var a = (2 + 2) * 2;
Console.WriteLine(a); // output: 8
De volgende tabel bevat de C#-operators die beginnen met de hoogste prioriteit tot de laagste. De operators binnen elke rij hebben dezelfde prioriteit.
Bedieners | Categorie of naam |
---|---|
x.y, f(x), a[i], x?.y , x?[y] x++, x--, x!, nieuw, typeof, uitgeschakeld, standaard, naamof, gemachtigde, groottevan, stackalloc, x-y> |
Primair |
+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true en false | Unaire |
x..y | Bereik |
schakelaar, met | expressies voor switch en with |
x * y, x / y, x % y | Multiplicatieve |
x + y, x – y | Toevoeging |
x << y, x >> y, x >>> y | Verschuiving |
x < y, x > y, x <= y, x >= y, is, zoals | Relationele en type-testen |
x == y, x != y | Gelijkheid |
x & y |
Booleaanse logische AND of bitwise logische AND |
x ^ y |
Booleaanse logische XOR of bitwise logische XOR |
x | y |
Booleaanse logische OR of bitwise logische OR |
x en y | Voorwaardelijk en |
x || j | Voorwaardelijk OF |
x ?? y | Operator null-coalescing |
c ? t : f | Voorwaardelijke 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, x >>>= y, x ?? = y, => | Toewijzings- en lambda-aangifte |
Zie de sectie Prioriteit en volgorde van het controleren van logische patronen in het artikel Patronen voor informatie over de prioriteit van logische patrooncombinaties.
Associativiteit van operator
Wanneer operators dezelfde prioriteit hebben, bepaalt de associativiteit van de operators de volgorde waarin de bewerkingen worden uitgevoerd:
-
Links-associatieve operatoren worden geëvalueerd in volgorde van links naar rechts. Met uitzondering van de toewijzingsoperatoren en de operatoren voor null-coalescing zijn alle binaire operatoren links-associatief. Wordt bijvoorbeeld
a + b - c
geëvalueerd als(a + b) - c
. -
Rechts-associatieve operatoren worden geëvalueerd in volgorde van rechts naar links. De toewijzingsoperatoren, de operatoren voor null-coalescing, lambdas en de voorwaardelijke operator
?:
zijn juist associatief. Wordt bijvoorbeeldx = y = z
geëvalueerd alsx = (y = z)
.
Belangrijk
In een expressie van het formulier P?.A0?.A1
, als P
dat het is null
, noch A0
A1
worden geëvalueerd. Op dezelfde manier, in een expressie van het formulier P?.A0.A1
, omdat A0
deze niet wordt geëvalueerd wanneer P
null is, is geen van beide A0.A1
. Zie de C#-taalspecificatie voor meer informatie.
Gebruik haakjes om de volgorde van evaluatie te wijzigen die is opgelegd door de associativiteit van de operator:
int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}"); // output: a = 1, b = 6
Operand-evaluatie
Niet-gerelateerd aan operatorprioriteit en associativiteit worden operanden in een expressie van links naar rechts geëvalueerd. In de volgende voorbeelden ziet u de volgorde waarin operators en operanden worden geëvalueerd:
Uitdrukking | Volgorde van evaluatie |
---|---|
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, * |
Normaal gesproken worden alle operatoroperanden geëvalueerd. Sommige operators evalueren echter operanden voorwaardelijk. Dat wil gezegd, de waarde van de meest linkse operand van een dergelijke operator bepaalt of (of welke) andere operanden moeten worden geëvalueerd. Deze operators zijn de operatoren voor voorwaardelijke logische EN () EN (&&
) enOR (||
), de operatoren ??
voor null-coalescing en ??=
, de operator voor null-voorwaardelijke voorwaarden ?.
en ?[]
, en de voorwaardelijke operator ?:
. Zie de beschrijving van elke operator voor meer informatie.
C#-taalspecificatie
Zie de volgende secties van de C#-taalspecificatie voor meer informatie: