假设我有
List<MyObject?> list = ...;
Run Code Online (Sandbox Code Playgroud)
我想把它变成List<MyObject>,但我无法删除可为空的引用。
下面是一个 MCVE。在我的项目中,我将可空引用警告转换为错误,因此下面注释掉的行将无法编译。
如果我这样做,.Where(e => e != null).Select(e => e!)那么在最新的 .NET Core 3.1.100 中就可以了,但是我无法将其提取到扩展方法中。
我尝试添加此扩展方法
public static IEnumerable<T> NotNull<T>(this IEnumerable<T> enumerable)
{
return enumerable.Where(e => e != null).Select(e => e!);
}
Run Code Online (Sandbox Code Playgroud)
但是它不会转换IEnumerable<MyObject?>为IEnumerable<MyObject>,我不确定为什么。这导致我出现如下错误:
[CS8619] 类型“列表”的值中引用类型的可空性与目标类型“列表”不匹配。
有没有办法让NotNull上面的功能以某种方式工作?