Мені хотілося перевірити нову функцію змінних посилальних типів у C # 8.0.
Я запустив новий проект, орієнтований на .NET Core 3.0, включив нульові типи посилань у .csproj
файл та почав кодувати. Я створив простий список, який приймає a 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, зрозуміло, чому : Метод повертає а string
, а не нульовий еквівалент, якого string?
я очікував.
Використання наведеного нижче методу дає попередження, яке я очікував:
var arg = args.Contains("abc") ? "abc" : null;
return arg;
Чи System.Linq
дійсно системні бібліотеки (у цьому прикладі ) не піддають інформації про нікчемність під час націлювання на .NET Core 3.0?