Я хотел протестировать новую возможность ссылочных типов обнуляемого в 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?