Zuweisungsoperatoren (C#-Referenz)Assignment operators (C# reference)

Der Zuweisungsoperator = weist den Wert seines rechtsseitigen Operanden einer Variablen, einer Eigenschaft oder einem, durch seinen linksseitigen Operanden angegebenen Indexer-Element zu.The assignment operator = assigns the value of its right-hand operand to a variable, a property, or an indexer element given by its left-hand operand. Das Ergebnis eines Zuweisungsausdrucks ist der Wert, der dem linksseitigen Operanden zugewiesen wird.The result of an assignment expression is the value assigned to the left-hand operand. Der Typ des rechtsseitigen Operanden muss mit dem Typ des linksseitigen Operanden übereinstimmen oder implizit in ihn konvertierbar sein.The type of the right-hand operand must be the same as the type of the left-hand operand or implicitly convertible to it.

Der Zuweisungsoperator = ist rechtsassoziativ, d. h. ein Ausdruck der FormThe assignment operator = is right-associative, that is, an expression of the form

a = b = c

wird als ausgewertet,is evaluated as

a = (b = c)

Das folgende Beispiel zeigt die Verwendung des Zuweisungsoperators mit einer lokalen Variablen, einer Eigenschaft und einem Indexerelement als linksseitigem Operanden:The following example demonstrates the usage of the assignment operator with a local variable, a property, and an indexer element as its left-hand operand:

var numbers = new List<double>() { 1.0, 2.0, 3.0 };

Console.WriteLine(numbers.Capacity);
numbers.Capacity = 100;
Console.WriteLine(numbers.Capacity);
// Output:
// 4
// 100

int newFirstElement;
double originalFirstElement = numbers[0];
newFirstElement = 5;
numbers[0] = newFirstElement;
Console.WriteLine(originalFirstElement);
Console.WriteLine(numbers[0]);
// Output:
// 1
// 5

ref-Zuweisungsoperatorref assignment operator

Ab C# 7.3 können Sie mit dem ref-Zuweisungsoperator = ref eine ref local- oder ref readonly local-Variable neu zuweisen.Beginning with C# 7.3, you can use the ref assignment operator = ref to reassign a ref local or ref readonly local variable. Im folgenden Beispiel wird die Verwendung des ref-Zuweisungsoperators veranschaulicht:The following example demonstrates the usage of the ref assignment operator:

void Display(double[] s) => Console.WriteLine(string.Join(" ", s));

double[] arr = { 0.0, 0.0, 0.0 };
Display(arr);

ref double arrayElement = ref arr[0];
arrayElement = 3.0;
Display(arr);

arrayElement = ref arr[arr.Length - 1];
arrayElement = 5.0;
Display(arr);
// Output:
// 0 0 0
// 3 0 0
// 3 0 5

Im Fall des REF-Zuweisungsoperators müssen beide Operanden vom gleichen Typ sein.In the case of the ref assignment operator, the both of its operands must be of the same type.

VerbundzuweisungCompound assignment

Bei einem binären Operator op entspricht ein Verbundzuweisungsausdruck der FormFor a binary operator op, a compound assignment expression of the form

x op= y

für die folgende Syntax:is equivalent to

x = x op y

außer dass x nur einmal überprüft wird.except that x is only evaluated once.

Verbundzuweisungen werden von arithmetischen, logischen booleschen und bitweisen logischen und Verschiebungs--Operatoren unterstützt.Compound assignment is supported by arithmetic, Boolean logical, and bitwise logical and shift operators.

NULL-Coalescing-ZuweisungNull-coalescing assignment

Sie können ab C# 8.0 den NULL-Coalescing-Zuweisungsoperator ??= verwenden, um den Wert des rechten Operanden dem linken Operanden nur dann zuzuweisen, wenn die Auswertung des linken Operanden null ergibt.Beginning with C# 8.0, you can use the null-coalescing assignment operator ??= to assign the value of its right-hand operand to its left-hand operand only if the left-hand operand evaluates to null. Weitere Informationen finden Sie im Artikel zu den Operatoren ?? und ??=.For more information, see the ?? and ??= operators article.

OperatorüberladbarkeitOperator overloadability

Ein benutzerdefinierter Typ kann den Zuweisungsoperator nicht überladen.A user-defined type cannot overload the assignment operator. Ein benutzerdefinierter Typ kann jedoch eine implizite Konvertierung in einen anderen Typ definieren.However, a user-defined type can define an implicit conversion to another type. Auf diese Weise kann der Wert eines benutzerdefinierten Typs einer Variablen, einer Eigenschaft oder einem Indexerelement eines anderen Typs zugewiesen werden.That way, the value of a user-defined type can be assigned to a variable, a property, or an indexer element of another type. Weitere Informationen finden Sie unter Benutzerdefinierte Konvertierungsoperatoren.For more information, see User-defined conversion operators.

Ein benutzerdefinierter Typ kann einen Verbundzuweisungsoperator nicht explizit überladen.A user-defined type cannot explicitly overload a compound assignment operator. Wenn jedoch ein benutzerdefinierter Typ einen binären op-Operator überlädt, wird der op=-Operator, sofern vorhanden, ebenfalls implizit überladen.However, if a user-defined type overloads a binary operator op, the op= operator, if it exists, is also implicitly overloaded.

C#-SprachspezifikationC# language specification

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

Weitere Informationen zum REF-Zuweiseungsoperator = ref finden Sie unter Hinweis zum Featurevorschlag.For more information about the ref assignment operator = ref, see the feature proposal note.

Weitere InformationenSee also