Почему перезаписывается весь 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 (int i in ints) { 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 (int i in ints)
{
Checker newChecker = new Checker();
newChecker.id = i;
newChecker.add();
}
}
Таким образом, каждый раз будет создаваться новый объект в списке с правильным id.