Почему перезаписывается весь list в class? На первую итерацию записывается значение 2, а не 1 На вторую итерацию 3, т.е первая итерация вообще пропускается, также 1 элемент списка имеет id = 3 и 2ой элемент списка имеет id = 3 Т.е у всех элементов в списке перезаписываются id на id текущей итерации.class Checker { public int id; public List list = new List(); public void add() { list.Add(this); } } class Check { Checker checker = new Checker(); public void test() { int[] ints = { 1, 2, 3 }; foreach (int i in ints) { checker.id = i; checker.add(); } } }

16 Дек 2022 в 19:52
135 +1
0
Ответы
1

Проблема здесь заключается в том, что в методе test() каждый раз вызывается метод add(), который добавляет в список объект Checker с ссылкой на текущий экземпляр checker. После этого значение id в объекте checker перезаписывается на текущее значение i и при следующей итерации в списке уже будет объект с обновленным id.

Чтобы исправить это, нужно создавать новый экземпляр объекта Checker на каждой итерации в методе test():

public void test()
{
int[] ints = { 1, 2, 3 };
foreach (int i in ints)
{
Checker newChecker = new Checker();
newChecker.id = i;
newChecker.add();
}
}

Таким образом, каждый раз будет создаваться новый объект в списке с правильным id.

16 Апр в 16:57
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 493 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир