Activator.CreateInstance(Type) Может Возвращать Null
Activator.CreateInstance(Type) позволяет создать экземпляр типа, не зная тип во время компиляции. Например, вы можете захотеть создать экземпляр типа на основе файла конфигурации или ввода пользователя. Всегда, когда вы не можете использовать ключевое слово new, вы можете использовать Activator.CreateInstance(Type).Большинство людей ожидают, что этот метод вернет не-null объект, поскольку вы явно запрашиваете создание нового экземпляра, но это не всегда так. Для типов Nullable<T>
Activator.CreateInstance(Type) возвращает значение null.object? value = Activator.CreateInstance(typeof(int?));
Console.WriteLine(value is null); // true
Заметьте, что такое же поведение наблюдается при использовании ключевого слова
new:object? value = new int?();
Console.WriteLine(value is null); // true
Вы можете использовать null-снисходительный оператор (!), чтобы подавить предупреждение о том, что значение может быть
null, если вы уверены, что тип не может быть Nullable<T>:object? value = Activator.CreateInstance(typeof(object))!;
Console.WriteLine(value.GetHashCode());
Console.WriteLine(value is null); // всегда false
Источник: https://www.meziantou.net/activator-createinstance-type-may-return-null.htm