¿Es esta la limitación de la comprobación que acepta valores NULL de C #? [duplicar]
Dec 18 2020
He recibido la siguiente advertencia de CS8629 en mi referencia a x
. Debido a la where
cláusula antes de select
, estoy seguro de que x.Value
nunca será una referencia anulable. ¿Es esta la limitación intrínseca de la comprobación nula de C #? ¿Hay alguna forma de deshacerse de la advertencia CS8629 además de suprimirla?
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);
Respuestas
2 Sweeper Dec 18 2020 at 08:50
Sí, este es el límite. LINQ todavía no está anotado con anotaciones que aceptan valores NULL. Vea esta respuesta , este problema y este problema , que están todos abiertos.
Si realmente no quiere usar !
, puede escribir algo como:
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>();
}
Entonces usa SelectMany
:
var myEnums = myStrings
.Select(x => x.ToEnum())
.SelectMany(x => x.AsEnumerable())
.ToList();
UsemeAlehosaini Dec 18 2020 at 08:48
Si bien no habrá un retorno nulo, intente lanzar el MyEnum?
to MyEnum
.
Como esto:
MyEnum myEnums = myStrings
.Select(x => x.ToEnum<MyEnum>())
.Where(x => x.HasValue)
.Select(x => x.Value) //CS8629 on x.
.ToList();