Почему перезаписывается весь 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
166 +1
0
Ответы
1

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

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

public void test
{
int ints = { 1, 2, 3 };
foreach intiinintsint i in intsintiinints
{
Checker newChecker = new Checker;
newChecker.id = i;
newChecker.add;
}
}

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

16 Апр 2024 в 16:57
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир