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 .csprojfichier et commencé à coder. J'ai créé une liste simple qui prend un string[]et renvoie le stringdans ce tableau qui est égal à abc. Maintenant, parce que je ne suis pas certain qu'il abcexiste réellement dans le tableau, j'utilise FirstOrDefault(), qui devrait par défaut nullsi 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?