Est-ce la limitation de la vérification Nullable C #? [dupliquer]
Dec 18 2020
J'ai eu l'avertissement CS8629 suivant sur ma référence à x
. En raison de la where
clause précédant le select
, je suis sûr que x.Value
ce ne sera jamais une référence nullable. Est-ce la limitation intrinsèque de la vérification Null C #? Existe-t-il un moyen de se débarrasser de l'avertissement CS8629 autre que de le supprimer?
var myEnums = myStrings
.Select(x => x.ToEnum<MyEnum>())
.Where(x => x.HasValue)
.Select(x => x.Value) //CS8629 on x.
.ToList();
MyEnum? ToEnum(this string str);
Réponses
2 Sweeper Dec 18 2020 at 08:50
Oui, c'est la limite. LINQ n'est pas encore annoté avec des annotations nullables. Voir cette réponse , ce problème et ce problème , qui sont tous ouverts.
Si vous ne voulez vraiment pas utiliser !
, vous pouvez écrire quelque chose comme:
static IEnumerable<T> AsEnumerable<T>(this Nullable<T> t) where T : struct {
if (t.HasValue) {
return Enumerable.Repeat(t.Value, 1);
}
return Enumerable.Empty<T>();
}
Ensuite, utilisez SelectMany
:
var myEnums = myStrings
.Select(x => x.ToEnum())
.SelectMany(x => x.AsEnumerable())
.ToList();
UsemeAlehosaini Dec 18 2020 at 08:48
Bien qu'il n'y ait pas de retour nul, essayez de lancer le MyEnum?
vers MyEnum
.
Comme ça:
MyEnum myEnums = myStrings
.Select(x => x.ToEnum<MyEnum>())
.Where(x => x.HasValue)
.Select(x => x.Value) //CS8629 on x.
.ToList();