Chciałem przetestować nową funkcję zerowania typów odwołań w C # 8.0.
Rozpocząłem nowy projekt ukierunkowany na .NET Core 3.0, włączyłem typy zerowalne w .csproj
pliku i zacząłem kodować. Utworzyłem prostą listę, która bierze a string[]
i zwraca string
w tej tablicy, która jest równa abc
. Teraz, ponieważ nie jestem pewien, czy abc
rzeczywiście istnieje w tablicy, używam FirstOrDefault()
, która powinna być domyślnie null
ustawiona, jeśli nie zostanie znalezione dopasowanie.
using System;
using System.Linq;
public string FindArgument(string[] args)
{
var arg = args.FirstOrDefault(x => x == "abc");
return arg;
}
Zwraca moją metodę string
, która powinna być teraz typem niezerowalnym . Ponieważ FirstOrDefault()
może się zwrócić null
, oczekiwałbym, że powyższa metoda wyświetli ostrzeżenie przy zwróceniu zmiennej może być zerowej arg
. To nie.
Patrząc na podpis FirstOrDefault()
w Visual Studio, jasne jest, dlaczego : Metoda zwraca a string
nie dopuszczalny zerowy odpowiednik, string?
którego bym się spodziewał.
Użycie poniższej metody metody daje oczekiwane ostrzeżenie:
var arg = args.Contains("abc") ? "abc" : null;
return arg;
Czy biblioteki systemowe (w tym przykładzie System.Linq
) tak naprawdę nie ujawniają informacji o wartości dopuszczalnej podczas celowania w .NET Core 3.0?
źródło