Я хотел протестировать новую возможность ссылочных типов обнуляемого в C # 8.0.
Я запустил новый проект, ориентированный на .NET Core 3.0, включил в .csproj
файл допустимые ссылочные типы и начал кодировать. Я создал простой список, который принимает string[]
и возвращает string
в этом массиве, который равен abc
. Теперь, поскольку я не уверен, что на abc
самом деле существует в массиве, я использую FirstOrDefault()
, который должен по умолчанию, null
если совпадение не найдено.
using System;
using System.Linq;
public string FindArgument(string[] args)
{
var arg = args.FirstOrDefault(x => x == "abc");
return arg;
}
Мой метод возвращает string
, который теперь должен быть ненулевым типом. Так как FirstOrDefault()
может вернуться null
, я ожидал бы, что вышеупомянутый метод выдаст предупреждение при возврате значения возможно нулевой arg
. Это не.
Глядя на подпись FirstOrDefault()
в Visual Studio, становится понятно, почему : метод возвращает a string
, а не эквивалентный нулю эквивалент, который string?
я ожидал бы.
Использование тела метода ниже дает предупреждение, которое я ожидал:
var arg = args.Contains("abc") ? "abc" : null;
return arg;
Разве системные библиотеки (в этом примере System.Linq
) действительно не предоставляют информацию об обнуляемости при нацеливании на .NET Core 3.0?
источник