gpt4 book ai didi

c# - 当 Linq where 什么都不返回时返回一个空集合

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

我正在使用以下语句,目的是从 MachineList 集合(类型 IEnumerable)中获取 MachineStatusi 的所有机器对象MachineList 集合并不总是包含状态为 i 的机器。

有时当没有机器的 MachineStatusi 时,我想返回一个空集合。我对 ActiveMachines 的调用(首先使用)有效,但 InactiveMachines 无效。

public IEnumerable<Machine> ActiveMachines
{
get
{
return Customer.MachineList
.Where(m => m.MachineStatus == "a");
}
}

public IEnumerable<Machine> InactiveMachines
{
get
{
return Customer.MachineList
.Where(m => m.MachineStatus == "i");
}
}

编辑

经过进一步检查,MachineList 的任何枚举似乎都会导致 MachineList 的后续枚举抛出异常:对象引用未设置为一个实例对象

因此,调用 ActiveMachinesInactiveMachines 并不重要,因为它是 MachineList 集合的问题。这尤其令人不安,因为我可以通过在代码中调用之前在 Watch 中枚举它来中断对 MachineList 的调用。在其最低级别 MachineList 实现 NHibernate.IQuery 作为 IEnumerable 返回。是什么导致 MachineList 在初始枚举后丢失其内容?

最佳答案

Where 如果没有匹配则返回一个空序列;这是一个完全有效的序列(不为空)。获得 null 的唯一方法是调用 FirstOrDefaultSingleOrDefault

您确定错误就在您认为的位置吗?

int?[] nums = { 1, 3, 5 };
var qry = nums.Where(i => i % 2 == 0);
Console.WriteLine(qry == null); // false
Console.WriteLine(qry.Count()); // 0
var list = qry.ToList();
Console.WriteLine(list.Count); // 0
var first = qry.FirstOrDefault();
Console.WriteLine(first == null); // true

关于c# - 当 Linq where 什么都不返回时返回一个空集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1822750/

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