Sponsorship is available! If you’d like to sponsor CodeOpinion.com and have your product or service advertised exclusively (no AdSense) on every post, contact me.Easily, by a landslide, the most common exception I’ve run into in C# is the
NullReferenceException. Second would be an
NullReferenceExceptionwins as most occurred exception hands down. This quick post shows how we can start avoiding the NullReferenceException. I despise null. I despise null checks. What if there was a way to get rid of null checks? Luckily there is. Last year I was at a talk by Reid Evans, Getting Started with Functional Programming in F#. He touched on it and I’ve been using an implementation in C# ever since.
an option type or maybe type is a polymorphic type that represents encapsulation of an optional value; e.g., it is used as the return type of functions which may or may not return a meaningful value when they are applied.Optional Library For this example, I’m going to use the Optional package. There are many similar type libraries available on NuGet, but this one is fairly feature rich and serves the purpose for my example.
NullReferenceExceptionSo I’m going to walk through a trivial example of a ASP.NET Core application that is going to return some customer data. The sample code below will throw a
NullReferenceExceptionwhen the incoming
customerIdis not found in our database.
Null CheckObvious answer is to wrap the return statement in an if statement to verify the customer returned from the
null. If it is, then return a
CustomerRepository, could’ve thrown a
InvalidOperationExceptionor another type of exception if the customer didn’t exist. But what if instead it returned an
Option<Customer>and never returned
null. In the example below, our
_customerRepository.GetOptionById(int)now returns an
Option<Customer>.This now forces us to specify how to handle if there is a value, and if it is null.
GatewayHopefully this a a simple example of the Option type and how it can be a gateway to removing null and
NullReferenceExceptionfrom your code. Take a deeper look at the docs for the Optional library as there are many other great examples. Are you using an implementation of Option/Maybe? Let me know in the comments or on Twitter.