Все массивы слотов содержат последний результат - PullRequest
3 голосов
/ 11 июля 2019

Я почти уверен, что об этом уже спрашивали, но я не знаю, что искать:

Я хочу заполнить массив тем, что нашел в лямбда-выражении. Я делаю это

IEnumerable<CapOrderTimeSlot>[] dummyDates = new IEnumerable<CapOrderTimeSlot>[DayCount];

for (int i=0; i< DayCount; i++)
{
    dummyDates[i] = OrderSlots.Where(os => os.ComputedStartDate == FirstDate.AddDays(i));
}

Проблема заключается в том, что каждый элемент в массиве содержит одинаковые элементы (вероятно, последний результат в цикле).

Как мне избежать этого?

Ответы [ 2 ]

3 голосов
/ 11 июля 2019

Проблема в том, что этот код сохраняет выражение в каждом элементе массива, а не в "материализованной" коллекции. В то же время все сохраненные выражения «связаны» с одним и тем же значением i из-за закрытия. Вот почему вы получаете последнее значение.

Просто измените это так:

for (int i=0; i< DayCount; i++)
{
    dummyDates[i] = OrderSlots.Where(os => os.ComputedStartDate == FirstDate.AddDays(i)).ToArray();
}
2 голосов
/ 11 июля 2019

Похоже, вы зациклили переменную цикла. Попробуйте сделать это:

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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...