이것이 C # nullable 검사의 제한입니까? [복제]
Dec 18 2020
.NET에 대한 참조에 대해 다음과 같은 CS8629 경고가 표시되었습니다 x
. 때문에의 where
전과 절 select
, 그 확신 x.Value
null 허용 기준이 될하지 않습니다. 이것이 C # null 검사의 본질적인 제한입니까? CS8629 경고를 억제하는 것 외에 제거 할 수있는 방법이 있습니까?
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);
답변
2 Sweeper Dec 18 2020 at 08:50
예, 이것이 한계입니다. LINQ는 아직 nullable 주석으로 주석 처리되지 않았습니다. 이 답변 , 이 문제 및 이 문제를 참조하십시오 .
정말로을 사용하고 싶지 않다면 !
다음과 같이 작성할 수 있습니다.
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>();
}
그런 다음 사용하십시오 SelectMany
.
var myEnums = myStrings
.Select(x => x.ToEnum())
.SelectMany(x => x.AsEnumerable())
.ToList();
UsemeAlehosaini Dec 18 2020 at 08:48
더 널 반환이 없을 것 동안, 캐스팅보십시오 MyEnum?
로 MyEnum
.
이렇게 :
MyEnum myEnums = myStrings
.Select(x => x.ToEnum<MyEnum>())
.Where(x => x.HasValue)
.Select(x => x.Value) //CS8629 on x.
.ToList();