C#-Operatoren und -Ausdrücke: C#-Referenz (2024)

  • Artikel

C# bietet viele verschiedene Operatoren. Viele dieser Operatoren werden von den integrierten Typen unterstützt und ermöglichen es Ihnen, grundlegende Vorgänge mit den Werten dieser Typen auszuführen. Diese Operatoren sind in folgende Gruppen unterteilt:

  • Arithmetische Operatoren, die arithmetische Operationen mit numerischen Operanden ausführen
  • Vergleichsoperatoren, die numerische Operanden vergleichen
  • Boolesche Logikoperatoren, die logische Vorgänge mit bool-Operanden ausführen
  • Bitweise Operatoren und Schiebeoperatoren, die bitweise Vorgänge oder Schiebevorgänge mit Operanden des integralen Typs ausführen
  • Gleichheitsoperatoren, die überprüfen, ob Operanden gleich sind oder nicht

In der Regel können Sie diese Operatoren überladen, also das Operatorverhalten für die Operanden eines benutzerdefinierten Typs angeben.

Die einfachsten C#-Ausdrücke sind Literale (zum Beispiel Integer und reelle Zahlen) sowie Namen von Variablen. Sie können diese mithilfe von Operatoren in komplexen Ausdrücken kombinieren. Die Operatorrangfolge und -assoziativität legen die Reihenfolge fest, in der die Vorgänge in einem Ausdruck durchgeführt werden. Sie können Klammern verwenden, um die Reihenfolge der Auswertung zu ändern, die durch die Operatorrangfolge und -assoziativität festgelegt wird.

Im folgenden Code befinden sich die Beispiele der Ausdrücke auf der rechten Seite der Zuweisungen:

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

In der Regel erzeugt ein Ausdruck ein Ergebnis und kann in einen anderen Ausdruck eingeschlossen werden. Ein void-Methodenaufruf ist ein Beispiel eines Ausdrucks, der kein Ergebnis erzeugt. Er kann nur als Anweisung wie im folgenden Beispiel verwendet werden.

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

Im Folgenden finden Sie einige weitere Ausdrücke, die von C# bereitgestellt werden:

  • Interpolierte Zeichenfolgenausdrücke, die eine bequeme Syntax zum Erstellen formatierter Zeichenfolgen bereitstellen:

    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.
  • Lambdaausdrü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:// 25
  • Abfrageausdrücke, mit denen Sie Abfragefunktionen direkt in C# verwenden können:

    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

Sie können eine Ausdruckskörperfunktion verwenden, um eine präzise Definition für eine Methode, einen Konstruktor, eine Eigenschaft, einen Indexer oder einen Finalizer bereitzustellen.

Operatorrangfolge

In einem Ausdruck mit mehreren Operatoren werden die Operatoren mit höherer Rangfolge vor den Operatoren mit niedrigerer Rangfolge ausgewertet. Im folgenden Beispiel wird die Multiplikation zuerst durchgeführt, da Sie eine höhere Rangfolge aufweist als die Addition:

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

Verwenden Sie Klammern, um die Reihenfolge der Auswertung zu ändern, die durch die Operatorrangfolge festgelegt ist:

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

Die folgende Tabelle listen die C#-Operatoren auf, und zwar von der höchsten zur niedrigsten Rangfolge. Die Operatoren in jeder Zeile weisen die gleiche Rangfolge auf.

OperatorenKategorie 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->yPrimär
+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, , *x, true und falseUnär
x..yBereich
switch, withswitch- und with-Ausdrücke
x * y, x / y, x % yMultiplikativ
x + y, x – yAdditiv
x << y, x >> yUMSCHALTTASTE
x < y, x > y, x <= y, x >= y, is, asRelational und Typtest
x == y, x != yGleichheit
x & yBoolescher logischer AND-Operator oder bitweiser logischer AND-Operator
x ^ yBoolescher logischer XOR-Operator oder bitweiser logischer XOR-Operator
x | yBoolescher logischer OR-Operator oder bitweiser logischer OR-Operator
Bedingtes AND
x || yBedingtes OR
x ?? YNullzusammensetzungsoperator
c ? t : fBedingter Operator
x = y, x += y, x -= y, x *= y, x /= y, x %= y, , x |= y, x ^= y, x <<= y, x >>= y, x ??= y, =>Zuweisungs- und Lambdadeklaration

Operatorassoziativität

Wenn Operatoren die gleiche Rangfolge aufweisen, legt die Assoziativität der Operatoren die Reihenfolge fest, in der Vorgänge durchgeführt werden:

  • Linksassoziative Operatoren werden von links nach rechts ausgewertet. Mit Ausnahme der Zuweisungsoperatoren und des NULL-Sammeloperators sind alle binären Operatoren linksassoziativ. a + b - c wird beispielsweise als (a + b) - c ausgewertet.
  • Rechtsassoziative Operatoren werden von rechts nach links ausgewertet. Die Zuweisungsoperatoren, die NULL-Sammeloperatoren, Lambdas und der bedingte Operator ?: sind rechtsassoziativ. x = y = z wird beispielsweise als x = (y = z) ausgewertet.

Verwenden Sie Klammern, um die Reihenfolge der Auswertung zu ändern, die durch die Operatorassoziativität festgelegt ist:

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

Operandenauswertung

Unabhängig von der Operatorrangfolge und -assoziativität werden die Operanden in einem Ausdruck von links nach rechts ausgewertet. Die folgenden Beispiele veranschaulichen die Reihenfolge, in der Operatoren und Operanden ausgewertet werden:

expressionReihenfolge der Auswertung
a + ba, b, +
a + b * ca, b, c, *, +
a / b + c * da, b, /, c, d, *, +
a / (b + c) * da, b, c, +, /, d, *

In der Regel werden alle Operanden eines Operators ausgewertet. Einige Operatoren werten Operanden jedoch bedingt aus. Das heißt, der Wert des Operanden ganz links in einem solchen Operator definiert, ob (oder welche) andere(n) Operanden ausgewertet werden sollen. Diese Operatoren sind die bedingten logischen Operatoren und OR (||), die NULL-Sammeloperatoren ?? und ??=, die NULL-bedingten Operatoren ?. und ?[] sowie der bedingte Operator ?:. Weitere Informationen finden Sie in der Beschreibung jedes Operators.

C#-Sprachspezifikation

Weitere Informationen finden Sie in den folgenden Abschnitten der C#-Sprachspezifikation:

  • Ausdrücke
  • Operatoren

Siehe auch

  • C#-Referenz
  • Operatorüberladung
  • Ausdrucksbaumstrukturen
C#-Operatoren und -Ausdrücke: C#-Referenz (2024)

References

Top Articles
Latest Posts
Article information

Author: Rubie Ullrich

Last Updated:

Views: 6108

Rating: 4.1 / 5 (72 voted)

Reviews: 95% of readers found this page helpful

Author information

Name: Rubie Ullrich

Birthday: 1998-02-02

Address: 743 Stoltenberg Center, Genovevaville, NJ 59925-3119

Phone: +2202978377583

Job: Administration Engineer

Hobby: Surfing, Sailing, Listening to music, Web surfing, Kitesurfing, Geocaching, Backpacking

Introduction: My name is Rubie Ullrich, I am a enthusiastic, perfect, tender, vivacious, talented, famous, delightful person who loves writing and wants to share my knowledge and understanding with you.