gpt4 book ai didi

c# - 为什么 Null 是一个无效的 LINQ 投影?

转载 作者:太空狗 更新时间:2023-10-29 21:07:05 25 4
gpt4 key购买 nike

我有以下语句,它始终返回 null:

var addins = allocations.SelectMany(
set => set.locations.Any(q => q.IsMatch(level, count))
? (List<string>)set.addins : null
);

我稍微修改了一下,现在可以正常工作了:

var addins = allocations.SelectMany(
set => set.locations.Any(q => q.IsMatch(level, count))
? set.addins : new List<string>()
);

我的主要问题:为什么 null 不能用作 LINQ 上下文中三元运算符的返回类型?

第二个问题:是否有更聪明的方法来制定上述查询(特别是如果它消除了“new List()”)?

最佳答案

Enumerable.SelectMany 将尝试枚举您的 lambda 返回的序列,并抛出 NullReferenceException 试图在 null 上调用 GetEnumerator()。您需要提供一个实际的空序列。您可以使用 Enumerable.Empty 而不是创建新列表:

var addins = allocations.SelectMany(
set => set.locations.Any(q => q.IsMatch(level, count))
? (List<string>)set.addins : Enumerable.Empty<string>()
);

我怀疑你真正想要的是在 SelectMany 之前调用 Where 来过滤掉你不想要的集合:

var addins = allocations
.Where(set => set.locations.Any(q => q.IsMatch(level, count)))
.SelectMany(set => (List<string>)set.addins);

或者,在查询语法中:

var addins =
from set in allocations
where set.locations.Any(q => q.IsMatch(level, count))
from addin in (List<string>)set.addins
select addin;

关于c# - 为什么 Null 是一个无效的 LINQ 投影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3765960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com