使用Linq的Where/Select来过滤掉null并将类型转换为非可空类型无法变成扩展方法。
- 论坛
- 使用Linq的Where/Select来过滤掉null并将类型转换为非可空类型无法变成扩展方法。
18 浏览
使用Linq的Where/Select来过滤掉null并将类型转换为非可空类型无法变成扩展方法。
假设我有以下代码:
List
我想将它转换为List
,但我无法去掉可为空的引用。
以下是一个MCVE(最小可复现示例)。在我的项目中,我将可为空引用警告设置为错误,因此下面被注释掉的代码将无法编译。
如果我使用.Where(e => e != null).Select(e => e!)
,则在最新的.NET Core 3.1.100中可以正常工作,但我无法将其提取为扩展方法。
我尝试添加了这个扩展方法:
public static IEnumerableNotNull (this IEnumerable enumerable) { return enumerable.Where(e => e != null).Select(e => e!); }
但它无法将IEnumerable
转换为IEnumerable
,我不确定为什么。这导致出现以下错误:
[CS8619] 类型为 'List' 的值中的引用类型的可为空性与目标类型 'List' 不匹配。
有办法让上述的NotNull
函数以某种方式工作吗?