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

Анализатор обнаружил, что в результате инициализации коллекции будет выброшено исключение типа 'NullReferenceException'\. Это может произойти, если коллекция является свойством/полем, которое инициализируется на этапе создания объекта\.

Рассмотрим пример:

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

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

В методе 'Process' создаётся объект типа 'Container'\. На этапе создания объекта инициализируется список 'States'\. При его инициализации будет выброшено исключение типа 'NullReferenceException'\. Данное поведение обусловлено тем, что конструкция 'States \= \{ "Red", "Yellow", "Green" \}' раскрывается в три вызова метода 'Add' у свойства 'States'\. По умолчанию объект типа 'List<string\>' имеет значение 'null'\. Следовательно, в данном случае метод 'Add' будет вызван у свойства, которое имеет значение 'null'\.

Чтобы избежать возникновения исключения, можно присвоить значение свойству на этапе объявления:

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

Теперь при инициализации на этапе создания объекта класса исключения не будет\.

Рассмотрим ещё один способ:

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

В данном случае сначала будет создан объект списка с помощью 'new\(\)', после чего в него будут добавлены элементы\.