Коллекция была изменена исключение linq-to-objects - PullRequest
1 голос
/ 08 марта 2010

Я получил странное исключение при попытке выяснить, является ли свойство в списке объектов одинаковым для всех объектов.

Это мой код:

bool lvNoGuests = pvBillData.Reservering.Dagen.All(x =>
{
    return x.AantalKinderen == pvBillData.Reservering.Dagen[0].AantalKinderen &&
           x.AantalVolwassenen == pvBillData.Reservering.Dagen[0].AantalVolwassenen
});

Идея состоит в том, чтобы использовать .All, чтобы увидеть, имеют ли все члены списка одинаковое значение для двух свойств, что и первая запись в списке.

Свойства являются простыми геттерами (не автоматически) и ничего не изменяют.

Когда я выполняю этот код, я получаю InvalidOperationException «Коллекция была изменена; операция перечисления может не выполняться».

Кто-нибудь понял, почему?

Списки не являются общими списками .net, а относятся к типу XPCollection (платформа XPO DevExpress).

Ответы [ 2 ]

3 голосов
/ 08 марта 2010

Является ли все простым добытчиком? Даже Dagen? Я могу только предположить, что происходит что-то напуганное (возможно, с динамическим созданием типов и переопределением без вывода сообщений, которое вы не видите в своем коде - члены virtual?). Однако, чтобы исправить , я бы попытался собрать подробности в переменные:

var first = pvBillData.Reservering.Dagen.First();
var kinderen = first.AantalKinderen;
var volwassenen = first.AantalVolwassenen;
bool lvNoGuests = pvBillData.Reservering.Dagen.All(
    x => x.AantalKinderen == kinderen && x.AantalVolwassenen == volwassenen);
3 голосов
/ 08 марта 2010

Попробуйте это:

var eersteDag = pvBillData.Reservering.Dagen[0];
var verwachtAantalKinderen = eersteDag.AantalKinderen;
var verwachtAantalVolwassenen = eersteDag.AantalVolwassenen;

bool lvNoGuests = pvBillData.Reservering.Dagen.All(x =>
{
    return x.AantalKinderen == verwachtAantalKinderen &&
           x.AantalVolwassenen == verwachtAantalVolwassenen
});
...