C# 8.0 has introduced a new operator that is known as a Null-coalescing assignment operator(??=). This operator is used to assign the value of its right-hand operand to its left-hand operand, only if the value of the left-hand operand is null. If the left-hand operand evaluates to non-null, then this operator does not evaluate its right-hand operand.
Syntax:
p ??= qHere, p is the left and q is the right operand of ??= operator. If the value of p is null, then ??= operator assigns the value of q in p. Or if the value of p is non-null, then it does not evaluate q. Important Points:
- The left-hand operand of the ??= operator must be a variable, or a property, or an indexer element.
- It is right-associative.
- You cannot overload ??= operator.
- You are allowed to use ??= operator with reference types and value types.
Example:
Output:CSharp // C# program to illustrate how to use // ??= operator with value types and // reference types using System; namespace example { class GFG { static void Main(string[] args) { // Reference types string item_1 = null; string item_2 = null; string item_4 = "GeeksforGeeks"; string item_5 = "GFG"; // Using ??= operator item_1 = item_1 ??= item_4; string item_6 = item_2 ??= item_5; Console.WriteLine("Value of item_1 is: {0}\n"+ "Value of item_6 is:{1}", item_1, item_6); // Value types int ? ele_1 = null; GFG obj = new GFG(); // Using ??= operator assigns // the value of ele_1 // And also you are allowed to // use method with ??= operator ele_1 = ele_1 ??= obj.Add(10, 30); Console.WriteLine("Value of ele_1 is {0}", ele_1); } // Method public int Add(int a, int b) { int result = a + b; return result; } } }
Value of item_1 is: GeeksforGeeks Value of item_6 is:GFG Value of ele_1 is 40
- With the help of ??= operator you can remove many redundant "if-else" conditions and make your code more compact and readable. As shown in the below example:
Example:
Output:CSharp // C# program to illustrate how to use // ??= operator to remove if statements using System; namespace example { class GFG { // Main Method static void Main(string[] args) { // Nullable variable int ? element = null; // Checking the element is null or not if (element is null) { // Assign a new value to the element // Using ??= operator int ? new_element = element ??= 400; Console.WriteLine("Element is null. "+ "So the new element is: {0}", new_element); } } } }
Element is null. So the new element is: 400
Output:CSharp // C# program to illustrate how to use // ??= operator to remove if statements using System; namespace example { class Program { static void Main(string[] args) { // Nullable variable int ? element = null; // Using ??= operator // Assign values to the null variable element ??= 400; Console.WriteLine("Element is: {0}", element); } } }
Element is: 400
- You can also use ??= operator like a nested chain. It makes your code more readable.
Example:
CSharp // C# program to illustrate // how to nest ??= operator using System; namespace example { class GFG { // Main Method static void Main(string[] args) { // Nullable variables int ? ele1 = null; int ? ele2 = null; int ? ele3 = 45; // Using Nested ??= operator int ? result = ele1 ??= ele2 ??= ele3; Console.WriteLine("Element is: {0}", result); } } }
Output:
Element is: 45