我很确定以前有人问过这个问题,但我不知道要搜索什么:
我想用我在 lambda 表达式中找到的内容填充一个数组。
我这样做
IEnumerable<CapOrderTimeSlot>[] dummyDates = new IEnumerable<CapOrderTimeSlot>[DayCount];
for (int i=0; i< DayCount; i++)
{
dummyDates[i] = OrderSlots.Where(os => os.ComputedStartDate == FirstDate.AddDays(i));
}
问题是数组中的每个项目最终都包含相同的项目(可能是循环中的最后一个结果)。
我如何避免这种情况?
最佳答案
问题是此代码将表达式保存在每个数组元素中,而不是“物化”集合中。同时,由于闭包,所有保存的表达式都“链接”到相同的 i 值。这就是为什么你得到最后一个值。
只需这样更改:
for (int i=0; i< DayCount; i++)
{
dummyDates[i] = OrderSlots.Where(os => os.ComputedStartDate == FirstDate.AddDays(i)).ToArray();
}
关于c# - 所有数组槽都包含最后的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56985131/