C# Null List (NullReferenceException)Learn about null List references. A null list can cause a NullReferenceException to be thrown.
Null List. In C# programs, a List reference can be null. This is not the same as it being empty and having zero elements. We must often test for null lists.
Keyword info. The null literal in the C# language is a special-cased zero value for reference types. It is used often with the List type.
This program declares 3 List references and checks them against null. 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 memory. If you assign it in different places, the same reference will be changed.
C# program that uses null Lists
using System; using System.Collections.Generic; class Program { // // 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. // // listB.Add("cat"); // // Static Lists and field Lists are automatically null. // Console.WriteLine(_listField == null); Console.WriteLine(default(List<bool>) == null); } }
False True True True
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object. at Program.Main....
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 a tutorial for replacing the null literal in a program with a "null object". This can simplify logic and reduce crashes.
Tip It makes sense to substitute a "dummy" object instance to stand in for cases where no data is available.
Summary. 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.
© 2007-2021 sam allen.
see site info on the changelog.