相关疑难解决方法(0)

使用Linq的Where/Select过滤掉null并将类型转换为不可为空的方法不能做成扩展方法

假设我有

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上面的功能以某种方式工作?

c# linq c#-8.0 nullable-reference-types

11
推荐指数
3
解决办法
2800
查看次数

标签 统计

c# ×1

c#-8.0 ×1

linq ×1

nullable-reference-types ×1