Мені хотілося перевірити нову функцію змінних посилальних типів у 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?