One of the useful additions to the C# language in version 6 that I regularly use is the null-conditional operator. Checking for null is something that is regularly done, the new null-conditional operator helps to reduce the amount of code that you have to write.
Below is a simplified explanation of the null conditional operator:
The expression A?.B evaluates to B if the left operand 'A' is not null; otherwise, it evaluates to null.
Here’s a simple example of how it can be used.
public class Dog
{
public string Name { get; set; }
public int Age { get; set; }
public Toy FavouriteToy { get; set; }
}Assume that d represents a dog. We can do the following.
var name = d?.Name;
var breed = d?.Breed;The variable name is a string. If d is null, name is null. If d is not null, name is the value of d.Name.
The variable age is an nullable int. If d is null, age is null. If d is not null, age is the value of d.Age.
Consider the example above where the Dog class contains a reference to the dog’s favourite toy. We can chain null-conditional operators to retrieve the favourite toy’s name.
var favouriteToy = d?.FavouriteToy?.Name;This is roughly equivalent to
var favouriteToy = (d == null) ? null : (d.FavouriteToy == null) ? null : d.FavouriteToy.Name;So we can see in this example the code becomes a lot cleaner.
Other usage scenarios
GetDog()?.FavouriteToy?.Name ?? "Dog needs a name";private Func<Dog, bool> Walk;
Walk?.Invoke(dog)var thing = new TFoo();
(thing as ICanDoSomething)?.DoSomething();