C # обновление объекта в цикле foreach - PullRequest
3 голосов
/ 04 апреля 2011

Я бы хотел сказать, что это работало, а сейчас - нет. Я не знаю, что изменилось бы.

        var inquiry = repo.GetByInstanceId(2);

        foreach (var s in inquiry.Prop)
        {
            s.Prop = "Test 1 2 3...";
        }

        Assert.AreEqual(true, inquiry.S.Single().IsDirty, "S Should Be Dirty");

То, что происходит, происходит до того, как объект Property будет обновлен, и все будет великолепно. Теперь свойство обновляется в цикле foreach, но после цикла foreach создается впечатление, что я ничего не делал.

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

Основное представление о том, что я делаю, таково:

        class test { public int check { get; set; } }

        var x = new List<test>();
        x.Add(new test(){ check = 1});

        foreach (var y in x)
        {
            y.check = 5;
        }

Вопрос в том, "Разве это не должно работать?" Я думаю, что должно, если не почему? У меня это работало, и я не знаю, что я изменил. Я мог бы показать вам свои объекты, но мне пришлось бы изменить имена настолько, что это было бы бессмысленно. IsDirty не проблема. Значение, которое я изменяю, изменяется внутри цикла, но не изменяется вне цикла.

Ответы [ 2 ]

6 голосов
/ 04 апреля 2011

В добавленном объяснении вы создаете копию в y и изменяете копию.

Это происходит, когда тип элементов списка - ValueType

1 голос
/ 04 апреля 2011

Я думаю, что ваша проблема может быть связана с GetByInstanceId.Если это возвращает IEnumerable, то, вероятно, ваш foreach просматривает значения и вносит изменения, но тогда ваш вызов Single повторяет и теряет ваши изменения.Возможно, вы захотите сделать ToList после GetByInstanceId.Конечно, это основано на предположении, что inquiry.S.Single().IsDirty является опечаткой и должно быть inquiry.Single().IsDirty.В противном случае нам нужно больше информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...