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 .csprojpliku i zacząłem kodować. Utworzyłem prostą listę, która bierze a string[]i zwraca stringw tej tablicy, która jest równa abc. Teraz, ponieważ nie jestem pewien, czy abcrzeczywiście istnieje w tablicy, używam FirstOrDefault(), która powinna być domyślnie nullustawiona, 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 stringnie 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?