= Operator (C# Reference)

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. The result of an assignment expression is the value assigned to the left-hand operand. The type of the right-hand operand must be the same as the type of the left-hand operand or implicitly convertible to it.

The assignment operator is right-associative, that is, an expression of the form

a = b = c

is evaluated as

a = (b = c)

The following example demonstrates the usage of the assignment operator to assign values to a local variable, a property, and an indexer element:

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

numbers.Capacity = 100;
// Output:
// 4
// 100

int newFirstElement;
double originalFirstElement = numbers[0];
newFirstElement = 5;
numbers[0] = newFirstElement;
// Output:
// 1
// 5

ref assignment operator

Beginning with C# 7.3, you can use the ref assignment operator = ref to reassign a ref local or ref readonly local variable. 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 };

ref double arrayElement = ref arr[0];
arrayElement = 3.0;

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

In the case of the ref assignment operator, the type of the left operand and the right operand must be the same.

For more information, see the feature proposal note.

Operator overloadability

A user-defined type cannot overload the assignment operator. However, a user-defined type can define an implicit conversion to another type. That way, the value of a user-defined type can be assigned to a variable, a property, or an indexer element of another type. For more information, see the implicit keyword article.

C# language specification

For more information, see the Simple assignment section of the C# language specification.

See also