Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

How to Use Null-Coalescing Operator (??)

0.00/5 (No votes)
29 Aug 2013 1  
How to Use Null-Coalescing Operator

Introduction

  • The ?? operator is called the null-coalescing operator
  • It's used to define a default value for nullable value types or reference types
  • It returns the left-hand operand if the operand is not null
  • Otherwise it returns the right operand

Null-Coalescing Operator

Compile-Time Errors and Exceptions

  • A nullable type can contain a value, or it can be undefined
  • The ?? operator defines the default value to be returned when a nullable type is assigned to a non-nullable type
  • If you try to assign a nullable value type to a non-nullable value type without using the ?? operator, you will generate a compile-time error

It's like this

int? x = null;//x is nullable value type
int z = 0;//z is non-nullable value type
z = x; 

Cannot implicitly convert type 'int?' to 'int'.

But if you use ?? operator. You won't have any problem.

z = x ?? 1;//with ?? operator No issues 
  • If you use a cast, and the nullable value type is currently undefined, an InvalidOperationException exception will be thrown

It's like this

int? x = null;//x is nullable value type
int z = 0;//z is non-nullable value type
z = (int)x;//when you run the app,
           //It'll give ==>

Nullable object must have a value

But If you use ?? operator, you won't have any problem.

z = x ?? 1;//with ?? operator No issues
  • The result of a ?? operator is not considered to be a constant even if both its arguments are constants

Example

class Program
    {
        static void Main(string[] args)
        {
            //EXAMPLE 01 :    

            int? x = null;
            // y = x, unless x is null, in which case y = -1

            int y = x ?? -1;

 
            //EXAMPLE 02 : ?? Operator With Value Type

            // Assign i to return value of method, unless
            // return value is null, in which case assign
            // default value of int to i

            int i = GetNullableInt() ?? default(int);

 
            //EXAMPLE 03 : ?? Operator With Reference Type

            string s = GetStringValue();

            // Assign content of s to z, unless s is null, 
            // in which case assign "Unspecified"

            var z = s ?? "Unspecified";
        }

        static int? GetNullableInt()
        {
            return null;
        }

        static string GetStringValue()
        {
            return null;
        }
    }

Output

Example 01

Null-Coalescing Operator Example  1

Example 02

Null-Coalescing Operator Example  2

Example 03

Null-Coalescing Operator Example  3

Usage of ?? Operator

  • The chaining is a big plus for the ?? operator. It removes a bunch of redundant IFs

    e.g.

    string finalVal = parm1 ?? localDefault ?? globalDefault; 
  • You can easily convert nullable value types into non-nullable types

    e.g.

    int? test = null;
    var result = test ?? 0; //now the result is int, not nullable int?
  • You can use null-coalescing operator in lazy instantiated private variables

    e.g.

    private IList<Car> _car;
    
    public ILis<Car> CarList
     {
       get { return _car ?? (_car = new List<Car>()); }
     }

References

?? Operator

Conclusion

  • It can greatly enhance your code, making it concise and pleasant to read.
  • Enjoy this ?? operator and let me know if you have any issues.

I hope this helps you. Comments and feedback are greatly appreciated.

You Might Also Like

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here