>
>
>
V3195. Collection initializer implicitl…


V3195. Collection initializer implicitly calls 'Add' method. Using it on member with default value of null will result in null dereference exception.

The analyzer has detected that during the initialization of the collection, the exception of the 'NullReferenceException' type is thrown. It can occur if the collection is a property/field which is initialized when the object is created.

The example:

class Container
{
  public List<string> States { get; set; }
}

void Process(string? message)
{
  var container = new Container 
  { 
    States = { "Red", "Yellow", "Green" } 
  };
}

In the 'Process' method, the object of the 'Container' type is created. When the object is created, the 'States' list is initialized. During its initialization, the exception of the 'NullReferenceException' type is thrown. It happens because the 'States = { "Red", "Yellow", "Green" }' construct sequentially calls three 'Add' methods on the 'States' property. The object of the 'List<string>' type has the 'null' value by default. Therefore, in this case, the 'Add' method is called on a property that has the 'null' value.

To avoid the exception, assign a value to a property when it is declared:

class Container
{
  public List<string> States { get; set; } = new List<string>();
}

Now, during the initialization, no exception occurs when the class object is created.

Here is another option:

void Process(string? message)
{
  var container = new Container 
  { 
    States = new() { "Red", "Yellow", "Green" } 
  };
}

In this case, the object of the list is created using 'new()' first, and then the items are added to it.

This diagnostic is classified as: