Volevo testare la nuova funzionalità dei tipi di riferimento nullable in C # 8.0.
Ho avviato un nuovo progetto destinato a .NET Core 3.0, abilitato i tipi di riferimento nullable nel .csprojfile e ho iniziato a scrivere codice. Ho creato un semplice elenco che accetta un string[]e restituisce stringin quell'array che è uguale abc. Ora, poiché non sono sicuro che abcesista effettivamente nell'array, lo uso FirstOrDefault(), che dovrebbe essere predefinito nullse non viene trovata una corrispondenza.
using System;
using System.Linq;
public string FindArgument(string[] args)
{
var arg = args.FirstOrDefault(x => x == "abc");
return arg;
}
Il mio metodo restituisce string, che ora dovrebbe essere il tipo non annullabile . Dal momento che FirstOrDefault()può tornare null, mi aspetterei che il metodo sopra riportato fornisca un avviso quando restituisce la variabile forse nulla arg . Non è così.
Guardando la firma per FirstOrDefault()in Visual Studio, è chiaro perché : il metodo restituisce un string, non l'equivalente nullable che string?mi aspetterei.
L'uso del metodo seguente mostra l'avvertimento che mi aspettavo:
var arg = args.Contains("abc") ? "abc" : null;
return arg;
Le librerie di sistema (in questo esempio System.Linq) non espongono davvero le informazioni di nullability quando si utilizza .NET Core 3.0?