Freigeben über


Zuweisungsoperatoren (C#-Referenz)

Der Zuweisungsoperator = weist den Wert seines rechtsseitigen Operanden einer Variablen, einer Eigenschaft oder einem durch seinen linksseitigen Operanden angegebenen Indexer-Element zu. Das Ergebnis eines Zuweisungsausdrucks ist der Wert, der dem linksseitigen Operanden zugewiesen wird. Der Typ des rechtsseitigen Operanden muss mit dem Typ des linksseitigen Operanden übereinstimmen oder implizit in ihn konvertierbar sein.

Der Zuweisungsoperator = ist rechtsassoziativ, d. h. ein Ausdruck der Form

a = b = c

wird als ausgewertet,

a = (b = c)

Das folgende Beispiel zeigt die Verwendung des Zuweisungsoperators mit einer lokalen Variablen, einer Eigenschaft und einem Indexerelement als linksseitigem Operanden:

List<double> numbers = [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

Der linke Operand einer Zuweisung empfängt den Wert des rechten Operanden. Wenn die Operanden Werttypen angehören, kopiert die Zuweisung den Inhalt des rechten Operanden. Wenn die Operanden Verweistypen sind, kopiert die Zuweisung den Verweis auf das Objekt.

Dies wird als Wertzuweisung bezeichnet: Der Wert wird zugewiesen.

Ref-Zuweisung

Die Ref-Zuweisung = ref macht den linken Operanden zu einem Alias für den rechten Operanden, wie das folgende Beispiel zeigt:

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 vorstehenden Beispiel wird die lokale Verweisvariable arrayElement als Alias für das erste Arrayelement initialisiert. Anschließend wird ihr ref erneut zugewiesen, sodass sie auf das letzte Arrayelement verweist. Da es sich um einen Alias handelt, wird beim Aktualisieren des Werts mit einem normalen Zuweisungsoperator = das entsprechende Arrayelement ebenfalls aktualisiert.

Der linke Operand der Zuweisung ref kann eine lokale Verweisvariable, ein ref-Feld und ein ref-, out- oder in-Methodenparameter sein. Beide Operanden müssen vom gleichen Typ sein.

Verbundzuweisung

Bei einem binären Operator op entspricht ein Verbundzuweisungsausdruck der Form

x op= y

für die folgende Syntax:

x = x op y

außer dass x nur einmal überprüft wird.

Verbundzuweisungen werden von arithmetischen, logischen booleschen und bitweisen logischen und Verschiebungs--Operatoren unterstützt.

NULL-Coalescing-Zuweisung

Sie können 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. Weitere Informationen finden Sie im Artikel zu den Operatoren ?? und ??=.

Operatorüberladbarkeit

Ein benutzerdefinierter Typ kann den Zuweisungsoperator nicht überladen. Ein benutzerdefinierter Typ kann jedoch eine implizite Konvertierung in einen anderen Typ definieren. Auf diese Weise kann der Wert eines benutzerdefinierten Typs einer Variablen, einer Eigenschaft oder einem Indexerelement eines anderen Typs zugewiesen werden. Weitere Informationen finden Sie unter Benutzerdefinierte Konvertierungsoperatoren.

Ein benutzerdefinierter Typ kann einen Verbundzuweisungsoperator nicht explizit überladen. Wenn jedoch ein benutzerdefinierter Typ einen binären op-Operator überlädt, wird der op=-Operator, sofern vorhanden, ebenfalls implizit überladen.

C#-Sprachspezifikation

Weitere Informationen finden Sie im Abschnitt Zuweisungsoperatoren der C#-Sprachspezifikation.

Weitere Informationen