Я хотел протестировать новую функцию Обнуляемые ссылочные типы в 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
, я ожидаю, что приведенный выше метод выдаст предупреждение при возврате переменной возможно null arg
. Это не так.
Глядя на подпись для FirstOrDefault
в Visual Studio , становится понятно, почему : метод возвращает string
, а не эквивалентный Nullable string?
Я быОжидайте.
Использование тела метода, приведенного ниже, дает ожидаемое мной предупреждение.
var arg = args.Contains("abc") ? "abc" : null;
return arg;
Системные библиотеки (в этом примере System.Linq
) действительно не предоставляют информацию об обнуляемости при нацеливании на .NET Core3,0