Search code examples
c#classinstantiationmembers

c# data class members are instantiated at declaration


I am working on a project where a lot of the data classes look like this:

[DataMember]
public List<SpecialOpeningHours> SpecialOpeningHours { get; set; } = new List<SpecialOpeningHours>();

I've never seen this before and would normally just do this:

[DataMember]
public List<SpecialOpeningHours> SpecialOpeningHours { get; set; }

Can anyone explain why the list in instantiated in this way and whether or not there is some advantage? It doesn't seem to make any difference in use. I am using Dapper and get the same result populating the list either way.


Solution

  • Your first example is just a shortcut introduced on C#6 for this:

    public MyClass()
    {
        this.SpecialOpeningHours = new List<SpecialOpeningHours>();
    }
    

    Now compare this with:

    public MyClass()
    {
        this.SpecialOpeningHours = null;
    }
    

    The former is what your first option is translated into when compiling, the second one is what you get when you don´t add any initial value. In particular your second example will cause a NullReferenceException as soon as you call any of its members, whereby the first one will run fine.