C# Null Coalescing Operator

Few new operators have been introduced in C#2.0. Null Coalescing operator, which is one of them, is discussed in this post. While coding, we frequently need to perform null checks as follows--

Contact contact = provider.GetContact(contactId); if (contact == null) { contact = new Contact(); }

Instead of using if block we could just write it –

Contact contact = provider.GetContact(contactId); contact = contact ?? new Contact();

It is pretty useful in the context of nullable types. It can also be handy while converting nullable type to value type, as shown below--

int? nullableInt = null; int valueInt = nullableInt ?? default(int);

The valueInt become value type after executing this statement. But if we write something like this--

int? nullableIntAgain = nullableInt ?? 5;

the int literal 5 is automatically converted to a nullable type by CLR and afterwards, being assigned to nullableIntAgain. Subsequently, we can assign it to null now--

nullableIntAgain = null;

Isn't pretty slick and handy? However, when using this operator we need to keep in mind that--

glyphicons

Null coalescing operator can only be used in nullable or reference type. Otherwise it will raise an InvalidOperationException.

glyphicons

We need to consider thread-safety also. Otherwise it could end up in race condition.

Hope it helps. Thanks!

Revisions

[R-1: 29-03-2013] Updated formatting to make this post more consistent with current CSS.