我很确定这已经被问过了,但我不知道要搜索什么:
我想用在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));
}
问题在于数组中的每个项目最终都包含相同的项目(可能是循环中的最后一个结果)。
如何避免这种情况?
答案 0 :(得分:3)
问题在于此代码将表达式保存在每个数组元素中,而不是“物化”集合中。同时,由于关闭,所有保存的表达式都“链接”到相同的i值。这就是为什么您获得最后的价值。
只需通过以下方式进行更改:
for (int i=0; i< DayCount; i++)
{
dummyDates[i] = OrderSlots.Where(os => os.ComputedStartDate == FirstDate.AddDays(i)).ToArray();
}
答案 1 :(得分:2)
好像,您的循环变量被捕获。尝试这样做:
IEnumerable<CapOrderTimeSlot>[] dummyDates = new IEnumerable<CapOrderTimeSlot>[DayCount];
for (int i=0; i< DayCount; i++)
{
int temp = i;
dummyDates[i] = OrderSlots.Where(os => os.ComputedStartDate == FirstDate.AddDays(temp));
}