C#-OperatorenC# Operators

C# bietet viele Operatoren, bei denen es sich um Symbole handelt, die angeben, welche Operationen (Mathematik, Indizierung, Funktionsaufruf usw.) in einem Ausdruck ausgeführt werden.C# provides many operators, which are symbols that specify which operations (math, indexing, function call, etc.) to perform in an expression. Sie können viele Operatoren überladen, um ihre Bedeutung zu ändern, wenn sie auf einen benutzerdefinierten Typ angewendet werden.You can overload many operators to change their meaning when applied to a user-defined type.

Operationen mit Ganzzahltypen (wie ==, !=, <, >, &, |) sind grundsätzlich auch für Aufzählungstypen (enum) zulässig.Operations on integral types (such as ==, !=, <, >, &, |) are generally allowed on enumeration (enum) types.

Die Abschnitte listen die C#-Operatoren auf, und zwar von der höchsten zur niedrigsten Rangfolge.The sections lists 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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.NOTE, you can click on the operators to go the detailed pages with examples.

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 is null.

x?[y] – nullbedingter Indexzugriff.x?[y] - null conditional index access. Gibt null zurück, wenn der linke Operand null ist.Returns null if the left-hand operand is null.

f(x) – Funktionsaufruf.f(x) – function invocation.

a[x] – Aggregatobjektindizierung.a[x] – aggregate object indexing.

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 „System.Type“ zurück.typeof – returns the System.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): Gibt den Standardwert des Typs T zurück, null für Verweistypen, 0 (null) für numerische Werte sowie mit 0/null aufgefüllte Member für Strukturtypen.default(T) – returns the default value of type T, null for reference types, zero for numeric types, and zero/null filled in members for struct types.

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.

-> – Mit Memberzugriff kombinierte Zeigerdereferenzierung.-> – pointer dereferencing 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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.NOTE, you can click on the operators to go the detailed pages with examples.

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

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

[!x](../../../csharp/language-reference/operators/logical-negation-operator.md) – Logische Negation.(../../../csharp/language-reference/operators/logical-negation-operator.md) – 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 Ganzzahl 1 addiert).Returns the value of x after updating the storage location with the value of x that is one less (typically adds the integer 1).

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

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

&x – Adresse von.&x – address of.

*x – Dereferenzierung.*x – dereferencing.

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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.NOTE, you can click on the operators to go the detailed pages with examples.

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 – modulus. 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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.NOTE, you can click on the operators to go the detailed pages with examples.

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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.NOTE, you can click on the operators to go the detailed pages with examples.

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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.NOTE, you can click on the operators to go the detailed pages with examples.

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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.NOTE, you can click on the operators to go the detailed pages with examples.

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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zur Detailseite mit den Beispielen zu wechseln.NOTE, you can click on the operator to go the details page with examples.

x & y – logisches oder bitweises AND.x & y – logical or bitwise AND. Die Verwendung mit Ganzzahltypen und enum ist im Allgemeinen zulässig.Use with integer types and enum types is generally allowed.

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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zur Detailseite mit den Beispielen zu wechseln.NOTE, you can click on the operator to go the details page with examples.

x ^ y – logisches oder bitweises XOR.x ^ y – logical or bitwise XOR. Sie können dies im Allgemeinen mit Ganzzahltypen und enum-Typen verwenden.You can generally use this with integer types and enum types.

Logischer OR-OperatorLogical 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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zur Detailseite mit den Beispielen zu wechseln.NOTE, you can click on the operator to go the details page with examples.

x | y – logisches oder bitweises OR.x | y – logical or bitwise OR. Die Verwendung mit Ganzzahltypen und enum ist im Allgemeinen zulässig.Use with integer types and enum types is generally allowed.

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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zur Detailseite mit den Beispielen zu wechseln.NOTE, you can click on the operator to go the details page with examples.

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 is 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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zur Detailseite mit den Beispielen zu wechseln.NOTE, you can click on the operator to go the details page with examples.

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 is 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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zur Detailseite mit den Beispielen zu wechseln.NOTE, you can click on the operator to go the details page with examples.

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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zur Detailseite mit den Beispielen zu wechseln.NOTE, you can click on the operator to go the details page with examples.

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

Zuweisung- 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. Beachten Sie, dass Sie auf die Operatoren klicken können, um zu den detaillierten Seiten mit Beispielen zu wechseln.NOTE, you can click on the operators to go the detailed pages with examples.

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 event festlegt, muss y eine entsprechende Funktion sein, die C# als ein Eventhandler hinzufügt.If x designates an event, then y must be an appropriate function 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 event festlegt, muss y eine entsprechende Funktion sein, die C# als ein Eventhandler entfernt.If x designates an event, then y must be an appropriate function 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 – modulus 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.

Arithmetischer ÜberlaufArithmetic Overflow

Die arithmetischen Operatoren (+, -, *, /) können Ergebnisse erzeugen, die sich außerhalb des zulässigen Wertebereichs für den betreffenden numerischen Typ befinden.The arithmetic operators (+, -, *, /) can produce results that are outside the range of possible values for the numeric type involved. Einzelheiten zu bestimmten Operatoren finden Sie im entsprechenden Abschnitt, grundsätzlich gilt aber:You should refer to the section on a particular operator for details, but in general:

  • Arithmetischer Überlauf bei ganzen Zahlen löst entweder eine OverflowException aus oder verwirft die höchstwertigen Bits des Ergebnisses.Integer arithmetic overflow either throws an OverflowException or discards the most significant bits of the result. Division ganzer Zahlen durch Null löst immer eine DivideByZeroException aus.Integer division by zero always throws a DivideByZeroException.

    Wenn ein Überlauf bei ganzen Zahlen auftritt, hängen die Auswirkungen vom Ausführungskontext ab, bei dem es sich um checked oder unchecked handeln kann.When integer overflow occurs, what happens depends on the execution context, which can be checked or unchecked. In einem "checked"-Kontext wird eine OverflowException ausgelöst.In a checked context, an OverflowException is thrown. In einem "unchecked"-Kontext werden die höchstwertigen Bits verworfen, und die Ausführung wird fortgesetzt.In an unchecked context, the most significant bits of the result are discarded and execution continues. Bei C# haben Sie die Wahl, einen Überlauf zu verarbeiten oder zu ignorieren.Thus, C# gives you the choice of handling or ignoring overflow. Standardmäßig erscheinen arithmetische Operationen in einem unchecked-Kontext.By default, arithmetic operations occur in an unchecked context.

    Neben arithmetischen Operationen können auch Konvertierungen zwischen ganzzahligen Typen (z.B. die Umwandlung von long nach int) einen Überlauf verursachen. Sie sind von der Ausführung „checked“ oder „unchecked“ abhängig.In addition to the arithmetic operations, integral-type to integral-type casts can cause overflow (such as when you cast a long to an int), and are subject to checked or unchecked execution. Bitweise Operatoren und Schiebeoperatoren verursachen allerdings nie einen Überlauf.However, bitwise operators and shift operators never cause overflow.

  • Arithmetischer Überlauf oder Division durch 0 (null) löst bei Gleitkommazahlen nie eine Ausnahme aus, weil die Gleitkommatypen auf IEEE 754 basieren und daher Vorkehrungen für die Darstellung von Unendlich und NaN (Not a Number/Keine Zahl) aufweisen.Floating-point arithmetic overflow or division by zero never throws an exception, because floating-point types are based on IEEE 754 and so have provisions for representing infinity and NaN (Not a Number).

  • Arithmetischer Überlauf bei Decimal löst immer eine OverflowException aus.Decimal arithmetic overflow always throws an OverflowException. Dezimale Division durch Null löst immer eine DivideByZeroException aus.Decimal division by zero always throws a DivideByZeroException.

Siehe auchSee Also

C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
C#: Überladbare OperatorenC# Overloadable Operators
C#-SchlüsselwörterC# Keywords