C#-Operatoren (C#-Referenz)C# operators (C# reference)

C# bietet eine Reihe von Operatoren, die von den integrierten Typen unterstützt werden.C# provides a number of operators supported by the built-in types. Beispielsweise führen arithmetische Operatoren arithmetische Vorgänge mit numerischen Operanden durch, und boolesche logische Operatoren führen logische Vorgänge mit den bool-Operanden durch.For example, arithmetic operators perform arithmetic operations with numeric operands and Boolean logical operators perform logical operations with the bool operands. Bestimmte Operatoren können überladen werden.Certain operators can be overloaded. Mit Operatorüberladung können Sie das Operatorverhalten für die Operanden eines benutzerdefinierten Typs angeben.With operator overloading, you can specify the operator behavior for the operands of a user-defined type.

In einem Ausdruck legen die Operatorrangfolge und -assoziativität die Reihenfolge fest, in der die Vorgänge durchgeführt werden.In an expression, operator precedence and associativity determine the order in which the operations are performed. Sie können Klammern verwenden, um die Reihenfolge der Auswertung zu ändern, die durch die Operatorrangfolge und -assoziativität festgelegt wird.You can use parentheses to change the order of evaluation imposed by operator precedence and associativity.

OperatorrangfolgeOperator precedence

In einem Ausdruck mit mehreren Operatoren werden die Operatoren mit höherer Rangfolge vor den Operatoren mit niedrigerer Rangfolge ausgewertet.In an expression with multiple operators, the operators with higher precedence are evaluated before the operators with lower precedence. Im folgenden Beispiel wird die Multiplikation zuerst durchgeführt, da Sie eine höhere Rangfolge aufweist als die Addition:In the following example, the multiplication is performed first because it has higher precedence than 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:Use parentheses to change the order of evaluation imposed by operator precedence:

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.The following table lists the C# operators starting with the highest precedence to the lowest. Die Operatoren in jeder Zeile weisen die gleiche Rangfolge auf.The operators within each row have the same precedence.

OperatorenOperators Kategorie oder NameCategory or name
x.y, x?.y, x?[y], f(x), a[i], x++, x--, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x->yx.y, x?.y, x?[y], f(x), a[i], x++, x--, new, typeof, checked, unchecked, default, nameof, delegate, sizeof, stackalloc, x->y PrimärPrimary
+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true und false+x, -x, !x, ~x, ++x, --x, ^x, (T)x, await, &x, *x, true and false UnärUnary
x..yx..y BereichRange
x * y, x / y, x % yx * y, x / y, x % y MultiplikativMultiplicative
x + y, x – yx + y, x – y AdditivAdditive
x << y, x >> yx << y, x >> y ShiftShift
x < y, x > y, x <= y, x >= y, is, asx < y, x > y, x <= y, x >= y, is, as Relational und TyptestRelational and type-testing
x == y, x != yx == y, x != y GleichheitEquality
x & y Boolescher logischer AND-Operator oder bitweiser logischer AND-OperatorBoolean logical AND or bitwise logical AND
x ^ y Boolescher logischer XOR-Operator oder bitweiser logischer XOR-OperatorBoolean logical XOR or bitwise logical XOR
x | y Boolescher logischer OR-Operator oder bitweiser logischer OR-OperatorBoolean logical OR or bitwise logical OR
x && yx && y Bedingtes ANDConditional AND
x || yx || y Bedingtes ORConditional OR
x ?? yx ?? y NullzusammensetzungsoperatorNull-coalescing operator
c ? t : fc ? t : f Bedingter OperatorConditional 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, x -= y, x *= y, x /= y, x %= y, x &= y, x |= y, x ^= y, x <<= y, x >>= y, x ??= y, => Zuweisungs- und LambdadeklarationAssignment and lambda declaration

OperatorassoziativitätOperator associativity

Wenn Operatoren die gleiche Rangfolge aufweisen, legt die Assoziativität der Operatoren die Reihenfolge fest, in der Vorgänge durchgeführt werden:When operators have the same precedence, associativity of the operators determines the order in which the operations are performed:

  • Linksassoziative Operatoren werden von links nach rechts ausgewertet.Left-associative operators are evaluated in order from left to right. Mit Ausnahme der Zuweisungsoperatoren und des NULL-Sammeloperators ?? sind alle binären Operatoren linksassoziativ.Except for the assignment operators and the null-coalescing operator ??, all binary operators are left-associative. a + b - c wird beispielsweise als (a + b) - c ausgewertet.For example, a + b - c is evaluated as (a + b) - c.
  • Rechtsassoziative Operatoren werden von rechts nach links ausgewertet.Right-associative operators are evaluated in order from right to left. Die Zuweisungsoperatoren, der NULL-Sammeloperator ?? und der bedingte Operator ?: sind rechtsassoziativ.The assignment operators, the null-coalescing operator ??, and the conditional operator ?: are right-associative. x = y = z wird beispielsweise als x = (y = z) ausgewertet.For example, x = y = z is evaluated as x = (y = z).

Verwenden Sie Klammern, um die Reihenfolge der Auswertung zu ändern, die durch die Operatorassoziativität festgelegt ist:Use parentheses to change the order of evaluation imposed by operator associativity:

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

OperandenauswertungOperand evaluation

Unabhängig von der Operatorrangfolge und -assoziativität werden die Operanden in einem Ausdruck von links nach rechts ausgewertet.Unrelated to operator precedence and associativity, operands in an expression are evaluated from left to right. Die folgenden Beispiele veranschaulichen die Reihenfolge, in der Operatoren und Operanden ausgewertet werden:The following examples demonstrate the order in which operators and operands are evaluated:

AusdruckExpression Reihenfolge der AuswertungOrder of evaluation
a + b a, b, +a, b, +
a + b * c a, b, c, *, +a, b, c, *, +
a / b + c * d a, b, /, c, d, *, +a, b, /, c, d, *, +
a / (b + c) * d a, b, c, +, /, d, *a, b, c, +, /, d, *

In der Regel werden alle Operanden eines Operators ausgewertet.Typically, all operator operands are evaluated. Einige Operatoren werten Operanden bedingt aus.Some operators evaluate operands conditionally. Das heißt, der Wert des ersten Operanden eines solchen Operators definiert, ob (oder welche) andere(n) Operanden ausgewertet werden sollen.That is, the value of the first operand of such an operator defines if (or which) other operands should be evaluated. Diese Operatoren sind die bedingten logischen Operatoren AND (&&) und OR (||), der NULL-Sammeloperator ??, die NULL-bedingten Operatoren ?. und ?[] sowie der bedingte Operator ?:.These operators are the conditional logical AND (&&) and OR (||) operators, the null-coalescing operator ??, the null-conditional operators ?. and ?[], and the conditional operator ?:. Weitere Einzelheiten finden Sie in der Beschreibung jedes Operators.See the description of each operator for more details.

C#-SprachspezifikationC# language specification

Weitere Informationen finden Sie im Abschnitt Operatoren der C#-Sprachspezifikation.For more information, see the Operators section of the C# language specification.

Siehe auchSee also