Learn about null List references. A null list can cause a NullReferenceException to be thrown.
Null List. A List can be null. This is not the same as it being empty and having zero elements. The null literal in the C# language is a special-cased zero value for reference types. It is used often with the List type.ListNullReferenceException
First, this program that declares 3 List references and checks them against the null literal. The program shows the difference between a List that is a field, such as a static List, and a List that is a local variable.
Also: It causes a NullReferenceException when it tries to use a null list. This must be avoided.
List A: The first List variable listA is initialized to a new empty List object. This variable does not have the value of null.
List B: The second List variable listB is initialized to the null literal. No memory is allocated on the managed heap in this assignment.
List field: This field is located in one place in the entire program's memory. If you assign it in different places, the same reference will be changed.
C# program that uses null Lists
// Field type List.
static List<int> _listField;
static void Main()
// Shows an empty List, not a null List.
List<string> listA = new List<string>();
Console.WriteLine(listA == null);
// A null List reference.
List<string> listB = null;
Console.WriteLine(listB == null);
// Calling an instance method on a null List causes a crash.
// Static Lists and field Lists are automatically null.
Console.WriteLine(_listField == null);
Console.WriteLine(default(List<bool>) == null);
Exception caused by null Lists
Unhandled Exception: System.NullReferenceException:
Object reference not set to an instance of an object.
Notes, fields. List fields (and other reference types) are automatically treated as null references when they are loaded. You never need to initialize reference fields to null when you first encounter them.
Discussion. The book Refactoring by Martin Fowler contains an interesting tutorial for replacing the null literal in a program with a "null object". This can simplify some complex logic and even reduce possible crashes in edge cases in your program.
It makes sense to substitute a "dummy" object instance to stand in for cases where no data is available, such as when the customer information is absent on a purchase. This can even improve performance due to fewer if-checks.If
Summary. We looked at null List references. Lists that are fields in a class, either static or instance, are automatically initialized to null. Lists that are local variables are not initialized to null.
And: You cannot call an instance method on a null List. The default value expression returns null for the List constructed type.