Je voulais tester la nouvelle fonctionnalité de types de référence nullable dans C # 8.0.
J'ai commencé un nouveau projet ciblant .NET Core 3.0, activé les types de référence nullables dans le .csproj
fichier et commencé à coder. J'ai créé une liste simple qui prend un string[]
et renvoie le string
dans ce tableau qui est égal à abc
. Maintenant, parce que je ne suis pas certain qu'il abc
existe réellement dans le tableau, j'utilise FirstOrDefault()
, qui devrait par défaut null
si aucune correspondance n'est trouvée.
using System;
using System.Linq;
public string FindArgument(string[] args)
{
var arg = args.FirstOrDefault(x => x == "abc");
return arg;
}
Ma méthode retourne string
, qui devrait maintenant être du type non nullable . Depuis FirstOrDefault()
mai retour null
, je m'attendrais à ce que la méthode ci-dessus génère un avertissement lors du retour de la variable peut - être nullearg
. Ce ne est pas.
En regardant la signature pour FirstOrDefault()
dans Visual Studio, il est clair pourquoi : La méthode renvoie un string
, pas l'équivalent nullable string?
que j'attendrais.
L'utilisation du corps de méthode ci-dessous donne l'avertissement auquel je m'attendais:
var arg = args.Contains("abc") ? "abc" : null;
return arg;
Les bibliothèques système (dans cet exemple System.Linq
) n'exposent-elles vraiment pas les informations de nullité lors du ciblage de .NET Core 3.0?