Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
C# stellt eine Reihe von Operatoren bereit. Viele davon werden von den integrierten Typen unterstützt und ermöglichen es Ihnen, grundlegende Vorgänge mit Werten dieser Typen auszuführen. Zu diesen Operatoren gehören die folgenden Gruppen:
- Arithmetische Operatoren , die arithmetische Operationen mit numerischen Operanden ausführen
- Vergleichsoperatoren , die numerische Operanden vergleichen
-
Boolesche logische Operatoren , die logische Vorgänge mit
boolOperanden ausführen - Bitweise und Schichtoperatoren , die Bitweise- oder Schichtvorgänge mit Operanden der integralen Typen ausführen
- Gleichheitsoperatoren , die überprüfen, ob ihre Operanden gleich sind oder nicht
In der Regel können Sie diese Operatoren überladen , d. h. das Operatorverhalten für die Operanden eines benutzerdefinierten Typs angeben.
Die einfachsten C#-Ausdrücke sind Literale (z. B. ganze Zahl und reelle Zahlen) und Namen von Variablen. Sie können sie mithilfe von Operatoren in komplexe Ausdrücke kombinieren. Die Rangfolge und Zuordnung des Operators bestimmen die Reihenfolge, in der die Vorgänge in einem Ausdruck ausgeführt werden. Sie können Klammern verwenden, um die Reihenfolge der Auswertung zu ändern, die von der Rangfolge und der Zuordnung des Operators auferlegt wird.
Im folgenden Code befinden sich Beispiele für Ausdrücke auf der rechten Seite von Zuordnungen:
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);
In der Regel erzeugt ein Ausdruck ein Ergebnis und kann in einen anderen Ausdruck eingeschlossen werden. Ein void Methodenaufruf ist ein Beispiel für einen Ausdruck, der kein Ergebnis erzeugt. Sie kann nur als Anweisung verwendet werden, wie das folgende Beispiel zeigt:
Console.WriteLine("Hello, world!");
Hier sind einige andere Arten von Ausdrücken, die C# bereitstellt:
Interpolierte Zeichenfolgenausdrücke , die eine bequeme Syntax zum Erstellen formatierter Zeichenfolgen bieten:
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-Ausdrücke , mit denen Sie anonyme Funktionen erstellen können:
int[] numbers = { 2, 3, 4, 5 }; var maximumSquare = numbers.Max(x => x * x); Console.WriteLine(maximumSquare); // Output: // 25Abfrageausdrücke , mit denen Sie Abfragefunktionen direkt in C# verwenden können:
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
Sie können eine Ausdruckstextdefinition verwenden, um eine präzise Definition für eine Methode, einen Konstruktor, eine Eigenschaft, einen Indexer oder einen Finalizer bereitzustellen.
Rangfolge der Operatoren
In einem Ausdruck mit mehreren Operatoren werden die Operatoren mit höherer Rangfolge ausgewertet, bevor die Operatoren mit niedrigerer Rangfolge ausgewertet werden. Im folgenden Beispiel wird die Multiplikation zuerst ausgeführt, da sie eine höhere Priorität hat als addition:
var a = 2 + 2 * 2;
Console.WriteLine(a); // output: 6
Verwenden Sie Klammern, um die Reihenfolge der Bewertung zu ändern, die von der Rangfolge des Operators auferlegt wird:
var a = (2 + 2) * 2;
Console.WriteLine(a); // output: 8
In der folgenden Tabelle sind die C#-Operatoren aufgeführt, die mit der höchsten Rangfolge am niedrigsten beginnen. Die Operatoren in jeder Zeile haben dieselbe Priorität.
| Betriebspersonal | Kategorie oder Name |
|---|---|
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 und false | Unär |
| x..y | Bereich |
| umschalten, mit |
switch- und with-Ausdrücke |
| x * y, x / y, x % y | Multiplikativ |
| x + y, x – y | Additiv |
| x << y, x >> y, x >>> y | Shift |
| x < y, x > y, x <= y, x >= y, ist, wie | Relational und Typtest |
| x == y, x != y | Gleichheit |
x & y |
Boolescher logischer UND oder bitweiser logischeR UND |
x ^ y |
Boolescher logischer XOR oder bitweiser logischer XOR |
x | y |
Boolescher logischer ODERoder bitweiser logischer OR |
| x und y | Bedingtes AND |
| x || y | Bedingtes OR |
| x ?? y | Null-Koalescingoperator |
| c ? t : f | Bedingter 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, => | Zuweisungs- und Lambda-Deklaration |
Informationen zur Rangfolge logischer Musterkombinatoren finden Sie im Abschnitt "Rangfolge und Reihenfolge der Überprüfung der logischen Muster " des Artikels "Patterns ".
Operatorassoziivität
Wenn Operatoren die gleiche Priorität haben, bestimmt die Assoziivität der Operatoren die Reihenfolge, in der die Vorgänge ausgeführt werden:
-
Links-assoziative Operatoren werden von links nach rechts ausgewertet. Mit Ausnahme der Zuordnungsoperatoren und der Operatoren für die Null-Koppierung sind alle binären Operatoren linksassoziativ. Wird z. B
a + b - c. als(a + b) - causgewertet. -
Rechtsassoziative Operatoren werden von rechts nach links ausgewertet. Die Zuordnungsoperatoren, die Null-Koalierungsoperatoren, Lambdas und der bedingte Operator
?:sind rechtsassoziativ. Wird z. Bx = y = z. alsx = (y = z)ausgewertet.
Von Bedeutung
In einem Ausdruck des Formulars P?.A0?.A1, wenn P ja , weder nullA0 ausgewertet noch A1 ausgewertet werden. Ebenso wird in einem Ausdruck des Formulars P?.A0.A1, da A0 der Wert nicht ausgewertet wird, wenn P null ist, ebenso wenig A0.A1. Weitere Details finden Sie in der C#-Sprachspezifikation .
Verwenden Sie Klammern, um die Reihenfolge der Bewertung zu ändern, die von der Operatorassoziivität auferlegt wird:
int a = 13 / 5 / 2;
int b = 13 / (5 / 2);
Console.WriteLine($"a = {a}, b = {b}"); // output: a = 1, b = 6
Operandenauswertung
Nicht im Zusammenhang mit der Rangfolge und Assoziivität des Operators werden Operanden in einem Ausdruck von links nach rechts ausgewertet. Die folgenden Beispiele veranschaulichen die Reihenfolge, in der Operatoren und Operanden ausgewertet werden:
| Ausdruck | Reihenfolge der Auswertung |
|---|---|
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, * |
In der Regel werden alle Operatoropernden ausgewertet. Einige Operatoren bewerten operanden jedoch bedingt. Das heißt, der Wert des äußerst linken Operanden eines solchen Operators definiert, ob (oder welche) andere Operanden ausgewertet werden sollen. Diese Operatoren sind die operatoren bedingte logische UND () und OR (&&||) und die Operatoren null-koalierende Operatoren ?? und ??=, die null-bedingten Operatoren ?. und ?[]der bedingte Operator ?:. Weitere Informationen finden Sie in der Beschreibung der einzelnen Operatoren.
C#-Sprachspezifikation
Weitere Informationen finden Sie in den folgenden Abschnitten der C#-Sprachspezifikation: