使用Linq的Where/Select来过滤掉null并将类型转换为非可空类型无法变成扩展方法。

18 浏览
0 Comments

使用Linq的Where/Select来过滤掉null并将类型转换为非可空类型无法变成扩展方法。

假设我有以下代码:

List list = ...;

我想将它转换为List,但我无法去掉可为空的引用。

以下是一个MCVE(最小可复现示例)。在我的项目中,我将可为空引用警告设置为错误,因此下面被注释掉的代码将无法编译。

如果我使用.Where(e => e != null).Select(e => e!),则在最新的.NET Core 3.1.100中可以正常工作,但我无法将其提取为扩展方法。

我尝试添加了这个扩展方法:

    public static IEnumerable NotNull(this IEnumerable enumerable)
    {
        return enumerable.Where(e => e != null).Select(e => e!);
    }

但它无法将IEnumerable转换为IEnumerable,我不确定为什么。这导致出现以下错误:

[CS8619] 类型为 'List' 的值中的引用类型的可为空性与目标类型 'List' 不匹配。

有办法让上述的NotNull函数以某种方式工作吗?

0