A new way of checking for nulls in C# 6

In this post we explored a couple of ways to handle null values in C# 5.

Obviously you can just test whether an object is equal to null:

private static string Resolve(string input)
	if (input == null) throw new ArgumentNullException("Input");

Also, you can take advantage of the null-coalescing operator:

private static string Resolve(string input)
	string res = input ?? "Empty input string";
	return res;

…or the ternary operator:

private static string Resolve(string input)
	string res = input == null ? "Empty input string" : input;
	return res;

C# 6 has a new syntax for testing for null values. Let’s build a simple object model from the ground up:

  • The Address object has a street name and a street number
  • The Workplace object has an Address
  • The Person object has a Workplace
  • The Person object is retrieved from a web service within a GetPersonResponse object

So it’s a relatively deep structure. Here are the relevant classes:

public class Address
	public string Street { get; }
	public int Number { get; }

	public Address(string street, int number)
		Street = street;
		Number = number;

public class Workplace
	public Address Address { get; }

	public Workplace(Address address)
		Address = address;

public class Person
	public Workplace Workplace { get; }

	public Person(Workplace workplace)
		Workplace = workplace;

public class GetPersonResponse
	public Person Person { get; }

	public GetPersonResponse(Person person)
		Person = person;

Now imagine that after acquiring the response from the web service we want to print the Person’s work address. You may be tempted to rush ahead and write:


This code can potentially throw the dreaded NullReferenceException for any nullable object:

  • getPersonResponse
  • Person
  • Workplace
  • Address
  • Street

E.g. if the Person is unemployed then Workplace may be null depending on the business rules we allow:

GetPersonResponse getPersonResponse = new GetPersonResponse(new Person(null));

To fully guard against null objects you have to validate each component in the object chain:

if (getPersonResponse != null && getPersonResponse.Person != null
	&& getPersonResponse.Person.Workplace != null && getPersonResponse.Person.Workplace.Address != null
	&& getPersonResponse.Person.Workplace.Address.Street != null)
	Console.WriteLine("No work address available");

You’ll probably agree that it is an unhealthy amount of code for a simple task.

C# 6 has a neat shorthand solution for that, here you are:

if (getPersonResponse?.Person?.Workplace?.Address?.Street != null)

Here’s a test object:

GetPersonResponse getPersonResponse = 
				new GetPersonResponse(new Person(new Workplace(new Address("Heaven street", 78))));

Sure enough, the work address “Heaven street” will be printed on the console window.

View all various C# language feature related posts here.

About Andras Nemes
I'm a .NET/Java developer living and working in Stockholm, Sweden.

2 Responses to A new way of checking for nulls in C# 6

  1. Peter Franzmayr says:

    Hello Andras,

    you can combine the ? and ?? operator, which is awesome in some cases.
    So your last example can be also written with one line (including the else part):

    Console.WriteLine(getPersonResponse?.Person?.Workplace?.Address?.Street ?? “No work address available”);

    Best regards

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s


A great WordPress.com site

Elliot Balynn's Blog

A directory of wonderful thoughts

HarsH ReaLiTy

A Good Blog is Hard to Find

Softwarearchitektur in der Praxis

Wissenswertes zu Webentwicklung, Domain-Driven Design und Microservices

Technology Talks

on Microsoft technologies, Web, Android and others

Software Engineering

Web development

Disparate Opinions

Various tidbits

chsakell's Blog


Once Upon a Camayoc

Bite-size insight on Cyber Security for the not too technical.

Guru N Guns's

OneSolution To dOTnET.

Johnny Zraiby

Measuring programming progress by lines of code is like measuring aircraft building progress by weight.

%d bloggers like this: