Будьте аккуратны при использовании 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

Комментариев нет:
Отправить комментарий