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 .csproj
file e ho iniziato a scrivere codice. Ho creato un semplice elenco che accetta un string[]
e restituisce string
in quell'array che è uguale abc
. Ora, poiché non sono sicuro che abc
esista effettivamente nell'array, lo uso FirstOrDefault()
, che dovrebbe essere predefinito null
se 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?