Должен ли NotNullWhen работать при присвоении результата переменной?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Должен ли NotNullWhen работать при присвоении результата переменной?

Сообщение Anonymous »

У меня есть следующий метод, который принимает тип в качестве параметра и проверяет, является ли он IEnumerable. Если это так, он возвращает true и устанавливает тип T в переменной out, в противном случае возвращает false.

Код: Выделить всё

private static bool TryGetEnumeratedType(Type type, [NotNullWhen(true)] out Type? enumeratedType)
{
enumeratedType = null;
bool isEnumerable = type.GetInterfaces().Any(i => i.GetTypeInfo() == typeof(IEnumerable));

if (!isEnumerable)
{
return false;
}

Type? genericType = type.GetGenericArguments().FirstOrDefault();

if (genericType is null)
{
return false;
}

enumeratedType = genericType;

return true;
}
Если я вызову метод таким образом, проблем не возникнет:

Код: Выделить всё

Type fieldType;

if (TryGetEnumeratedType(inType, out Type? type))
{
fieldType = type;
}
else
{
fieldType = inType;
}
Но если я назначаю результат переменной и проверяю ее, я получаю предупреждение компилятора при присвоении fieldType = type о том, что type может быть нулевым .

Код: Выделить всё

Type fieldType;
bool isEnumerable = TryGetEnumeratedType(inType, out Type? type);

if (isEnumerable)
{
fieldType = type;
}
else
{
fieldType = inType;
}
Это ошибка или я что-то упускаю?

Подробнее здесь: https://stackoverflow.com/questions/714 ... a-variable
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»