Почему перезаписывается весь 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(); } } }
Проблема здесь заключается в том, что в методе 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.
Проблема здесь заключается в том, что в методе 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.