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

C# bietet eine Reihe vordefinierter Operatoren, die von den integrierten Typen unterstützt werden.C# provides a number of predefined operators supported by the built-in types. Beispielsweise führen arithmetische Operatoren arithmetische Vorgänge mit Operanden von integrierten numerischen Typen durch, und boolesche logische Operatoren führen logische Vorgänge mit den bool-Operanden aus.For example, arithmetic operators perform arithmetic operations with operands of built-in numeric types and Boolean logical operators perform logical operations with the bool operands.

Ein benutzerdefinierter Typ kann bestimmte Operatoren überladen, um das zugehörige Verhalten für die Operanden dieses Typs zu definieren.A user-defined type can overload certain operators to define the corresponding behavior for the operands of that type. Weitere Informationen finden Sie im Artikel zum Schlüsselwort operator.For more information, see the operator keyword article.

Die folgenden Abschnitte listen die C#-Operatoren auf, und zwar von der höchsten zur niedrigsten Rangfolge.The following sections list the C# operators starting with the highest precedence to the lowest. Die Operatoren in jedem Abschnitt verwenden die gleiche Rangfolgenebene.The operators within each section share the same precedence level.

Primäre OperatorenPrimary operators

Hierbei handelt es sich um die höchsten Rangfolgenoperatoren.These are the highest precedence operators.

x.y – Memberzugriff.x.y – member access.

x?.y – nullbedingter Memberzugriff.x?.y – null conditional member access. Gibt null zurück, wenn der linke Operand null ist.Returns null if the left-hand operand evaluates to null.

x?[y] – nullbedingter Arrayelement- oder Typindexerzugriff.x?[y] - null conditional array element or type indexer access. Gibt null zurück, wenn der linke Operand null ist.Returns null if the left-hand operand evaluates to null.

f(x) – Methodenaufruf oder Delegataufruf.f(x) – method call or delegate invocation.

a[x] – Arrayelement- oder Typindexerzugriff.a[x] – array element or type indexer access.

x++ – Postfixinkrement.x++ – postfix increment. Gibt den Wert von x zurück und aktualisiert dann den Speicherort mit dem Wert von x, der eins größer ist (für gewöhnlich wird die Ganzzahl 1 addiert).Returns the value of x and then updates the storage location with the value of x that is one greater (typically adds the integer 1).

x-- – Postfixdekrement.x-- – postfix decrement. Gibt den Wert von x zurück und aktualisiert dann den Speicherort mit dem Wert von x, der eins kleiner ist (für gewöhnlich wird die Ganzzahl 1 subtrahiert).Returns the value of x and then updates the storage location with the value of x that is one less (typically subtracts the integer 1).

new – Typinstanziierung.new – type instantiation.

typeof: Gibt das den Operanden repräsentierende Objekt Type zurück.typeof – returns the Type object representing the operand.

checked – Aktiviert die Überlaufprüfung für Ganzzahloperationen.checked – enables overflow checking for integer operations.

unchecked – Deaktiviert die Überlaufprüfung für Ganzzahloperationen.unchecked – disables overflow checking for integer operations. Dies ist das Standardverhalten für den Compiler.This is the default compiler behavior.

default(T): erzeugt den Standardwert des Typs T.default(T) – produces the default value of type T.

nameof – Ruft den einfachen (nicht qualifizierten) Namen einer Variablen, eines Typs oder eines Members als konstante Zeichenfolge ab.nameof - obtains the simple (unqualified) name of a variable, type, or member as a constant string.

delegate – Deklariert eine Delegatinstanz und gibt sie zurück.delegate – declares and returns a delegate instance.

sizeof – Gibt die Größe des Typoperanden in Byte zurück.sizeof – returns the size in bytes of the type operand.

stackalloc – Belegt einen Speicherblock auf dem Stapel.stackalloc - allocates a block of memory on the stack.

-> – Mit Memberzugriff kombinierte Zeigerdereferenzierung-> – pointer indirection combined with member access.

Unäre OperatorenUnary operators

Diese Operatoren haben eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt.These operators have higher precedence than the next section and lower precedence than the previous section.

+x – Gibt den Wert von x zurück.+x – returns the value of x.

-x – Numerische Negation.-x – numeric negation.

!x – logische Negation.!x – logical negation.

~x – Bitweises Komplement.~x – bitwise complement.

++x – Präfixinkrement.++x – prefix increment. Gibt den Wert von x nach dem Aktualisieren des Speicherorts mit dem Wert von x zurück, der eins größer ist (für gewöhnlich wird die Ganzzahl 1 addiert).Returns the value of x after updating the storage location with the value of x that is one greater (typically adds the integer 1).

--x – Präfixdekrement.--x – prefix decrement. Gibt den Wert von x nach dem Aktualisieren des Speicherorts mit dem Wert von x zurück, der eins kleiner ist (für gewöhnlich wird die ganze Zahl 1 subtrahiert).Returns the value of x after updating the storage location with the value of x that is one less (typically subtracts the integer 1).

(T)x – Typumwandlung.(T)x – type casting.

await – Wartet auf Task.await – awaits a Task.

&x – Adresse einer Variablen&x – address of a variable.

*x – Zeigerdereferenzierung*x – pointer indirection, or dereference.

Der true-Operator gibt den bool-Wert true zurück, um anzugeben, dass ein Operand definitiv den Wert „true“ hat.true operator - returns the bool value true to indicate that an operand is definitely true.

Der false-Operator gibt den bool-Wert true zurück, um anzugeben, dass ein Operand definitiv den Wert „false“ hat.false operator - returns the bool value true to indicate that an operand is definitely false.

Multiplikative OperatorenMultiplicative operators

Diese Operatoren haben eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt.These operators have higher precedence than the next section and lower precedence than the previous section.

x * y – Multiplikation.x * y – multiplication.

x / y – Division.x / y – division. Wenn es sich bei den Operanden um Ganzzahlen handelt, ist das Ergebnis eine Ganzzahl, die in Richtung 0 abgeschnitten wird (beispielsweise -7 / 2 is -3).If the operands are integers, the result is an integer truncated toward zero (for example, -7 / 2 is -3).

x % y – Restwert.x % y – remainder. Wenn es sich bei den Operanden um Ganzzahlen handelt, wird dadurch der Rest der Division x durch y zurückgegeben.If the operands are integers, this returns the remainder of dividing x by y. Wenn q = x / y und r = x % y, dann x = q * y + r.If q = x / y and r = x % y, then x = q * y + r.

Additive OperatorenAdditive operators

Diese Operatoren haben eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt.These operators have higher precedence than the next section and lower precedence than the previous section.

x + y – Addition.x + y – addition.

x – y – Subtraktion.x – y – subtraction.

SchiebeoperatorenShift operators

Diese Operatoren haben eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt.These operators have higher precedence than the next section and lower precedence than the previous section.

x << y – Verschiebt Bits nach links und füllt sie mit Null auf der rechten Seite auf.x << y – shift bits left and fill with zero on the right.

x >> y – Verschiebt Bits nach rechts.x >> y – shift bits right. Wenn der linke Operand int oder long ist, werden die linken Bits mit dem Vorzeichenbit gefüllt.If the left operand is int or long, then left bits are filled with the sign bit. Wenn der linke Operand uint oder ulong ist, werden die linken Bits mit Null gefüllt.If the left operand is uint or ulong, then left bits are filled with zero.

Relationale und TyptestoperatorenRelational and type-testing operators

Diese Operatoren haben eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt.These operators have higher precedence than the next section and lower precedence than the previous section.

x < y – Kleiner als (wahr, wenn x kleiner als y ist).x < y – less than (true if x is less than y).

x > y – Größer als (wahr, wenn x größer als y ist).x > y – greater than (true if x is greater than y).

x <= y – Ist kleiner oder gleich.x <= y – less than or equal to.

x >= y – Ist größer gleich.x >= y – greater than or equal to.

is – Typkompatibilität.is – type compatibility. Gibt TRUE zurück, wenn der ausgewertete linke Operand in den im rechten Operanden (ein statischer Typ) angegebenen Typ umgewandelt werden kann.Returns true if the evaluated left operand can be cast to the type specified in the right operand (a static type).

as – Typkonvertierung.as – type conversion. Gibt die Umwandlung des linken Operanden zum durch den rechten Operanden (ein statischer Typ) angegebenen Typ zurück, as gibt jedoch null zurück, wobei (T)x eine Auslösung ausgeben würde.Returns the left operand cast to the type specified by the right operand (a static type), but as returns null where (T)x would throw an exception.

GleichheitsoperatorenEquality operators

Diese Operatoren haben eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt.These operators have higher precedence than the next section and lower precedence than the previous section.

x == y – Gleichheit.x == y – equality. Standardmäßig wird für Verweistypen, die nicht string entsprechen, diese Verweisübereinstimmung (Identitätstest) zurückgebenBy default, for reference types other than string, this returns reference equality (identity test). Typen können == jedoch überladen. Wenn Sie also vorhaben, die Identität zu testen, sollten Sie möglichst die ReferenceEquals-Methode für object verwenden.However, types can overload ==, so if your intent is to test identity, it is best to use the ReferenceEquals method on object.

x != y – ungleich.x != y – not equal. Siehe hierzu den Kommentar für ==.See comment for ==. Wenn ein Typ == überlädt, muss er != überladen.If a type overloads ==, then it must overload !=.

Logischer AND-OperatorLogical AND operator

Dieser Operator hat eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt.This operator has higher precedence than the next section and lower precedence than the previous section.

x & ylogische AND-Operationen für die bool-Operanden oder bitweise logische AND-Operationen für die Operanden von integralen Typen.x & ylogical AND for the bool operands or bitwise logical AND for the operands of the integral types.

Logischer XOR-OperatorLogical XOR operator

Dieser Operator hat eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt.This operator has higher precedence than the next section and lower precedence than the previous section.

x ^ ylogische XOR-Operationen für die bool-Operanden oder bitweise logische XOR-Operationen für die Operanden von integralen Typen.x ^ ylogical XOR for the bool operands or bitwise logical XOR for the operands of the integral types.

Logischer OR-Operator (||)Logical OR operator

Dieser Operator hat eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt.This operator has higher precedence than the next section and lower precedence than the previous section.

x | ylogische OR-Operationen für die bool-Operanden oder bitweise logische OR-Operationen für die Operanden von integralen Typen.x | ylogical OR for the bool operands or bitwise logical OR for the operands of the integral types.

Bedingter AND-OperatorConditional AND operator

Dieser Operator hat eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt.This operator has higher precedence than the next section and lower precedence than the previous section.

x && y – logisches AND.x && y – logical AND. Wenn der erste Operand FALSE ist, wertet C# den zweiten Operand nicht aus.If the first operand evaluates to false, then C# does not evaluate the second operand.

Bedingter OR-OperatorConditional OR operator

Dieser Operator hat eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt.This operator has higher precedence than the next section and lower precedence than the previous section.

x || y – Logisches OR.x || y – logical OR. Wenn der erste Operand TRUE ist, wertet C# den zweiten Operand nicht aus.If the first operand evaluates to true, then C# does not evaluate the second operand.

NullzusammensetzungsoperatorNull-coalescing operator

Dieser Operator hat eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt.This operator has higher precedence than the next section and lower precedence than the previous section.

x ?? y – Gibt x zurück, sofern es Nicht-null ist; ansonsten wird y zurückgegeben.x ?? y – returns x if it is non-null; otherwise, returns y.

Bedingter OperatorConditional operator

Dieser Operator hat eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt.This operator has higher precedence than the next section and lower precedence than the previous section.

t ? x : y: Wenn der Test t TRUE ist, wird x ausgewertet und zurückgegeben, ansonsten wird y ausgewertet und zurückgegeben.t ? x : y – if test t evaluates to true, then evaluate and return x; otherwise, evaluate and return y.

Zuweisungs- und LambdaoperatorenAssignment and lambda operators

Diese Operatoren haben eine höhere Rangfolge als der nächste Abschnitt und eine geringere Rangfolge als der vorherige Abschnitt.These operators have higher precedence than the next section and lower precedence than the previous section.

x = y – Zuweisung.x = y – assignment.

x += y – Inkrement.x += y – increment. Fügen Sie dem Wert x den Wert y hinzu. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.Add the value of y to the value of x, store the result in x, and return the new value. Wenn x ein Ereignis festlegt, muss y eine entsprechende Methode sein, die C# als Ereignishandler hinzufügt.If x designates an event, then y must be an appropriate method that C# adds as an event handler.

x -= y – Dekrement.x -= y – decrement. Subtrahieren Sie vom Wert x den Wert y. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.Subtract the value of y from the value of x, store the result in x, and return the new value. Wenn x ein Ereignis festlegt, muss y eine entsprechende Methode sein, die C# als Ereignishandler entfernt.If x designates an event, then y must be an appropriate method that C# removes as an event handler.

x *= y – Multiplikationszuweisung.x *= y – multiplication assignment. Multiplizieren Sie den Wert y mit dem Wert x. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.Multiply the value of y to the value of x, store the result in x, and return the new value.

x /= y – Divisionszuweisung.x /= y – division assignment. Dividieren Sie den Wert x durch den Wert y. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.Divide the value of x by the value of y, store the result in x, and return the new value.

x %= y – Restwertzuweisung.x %= y – remainder assignment. Dividieren Sie den Wert x durch den Wert y. Speichern Sie den Rest in x, und geben Sie den neuen Wert zurück.Divide the value of x by the value of y, store the remainder in x, and return the new value.

x &= y – AND-Zuweisung.x &= y – AND assignment. Führen Sie eine AND-Operation der Werte y und x aus. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.AND the value of y with the value of x, store the result in x, and return the new value.

x |= y – OR-Zuweisung.x |= y – OR assignment. Führen Sie eine OR-Operation der Werte y und x aus. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.OR the value of y with the value of x, store the result in x, and return the new value.

x ^= y – XOR-Zuweisung.x ^= y – XOR assignment. Führen Sie eine XOR-Operation der Werte y und x aus. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.XOR the value of y with the value of x, store the result in x, and return the new value.

x <<= y – Linksschiebezuweisung.x <<= y – left-shift assignment. Verschieben Sie den Wert von x nach links um y Stellen. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.Shift the value of x left by y places, store the result in x, and return the new value.

x >>= y – Rechtsschiebezuweisung.x >>= y – right-shift assignment. Verschieben Sie den Wert von x nach rechts um y Stellen. Speichern Sie das Ergebnis in x, und geben Sie den neuen Wert zurück.Shift the value of x right by y places, store the result in x, and return the new value.

=> – Lambdadeklaration.=> – lambda declaration.

Siehe auchSee also