У меня есть объект, который хранит две строки и переопределяет метод ToString(), чтобы вернуть одну из этих строкДобавление пользовательских объектов в проверяемых списки в C#
fooBar temp;
foreach (string foo in bar)
{
temp = new fooBar(); <--- Why is this line needed when I
am overwriting the code and path on each cycle before adding?
temp.code += ".";
temp.path += ".";
Console.WriteLine(temp);
clbFooBar.Items.Add(temp);
}
начинает печать на консоль подчиняется перезаписан код и значения строки пути, но элементы отмеченного элемента списка - это все то же самое (ToString() последнего элемента), что происходит в основном процессе, что не сразу становится очевидным?
Если изменить его clbFooBar.Items.Add(temp.ToString());
она работает абсолютно нормально, но это не было бы так же, как temp.ToString.ToString()
, потому что .Add
звонки .ToString()
в первую очередь? Я понял, как консольную печать и .Add
будет действовать так же, видя, как они оба называют ToString()
EDIT: temp = new fooBar();
это исправить мою проблему, я просто хочу знать, почему это исправить, когда интуиция заставляет меня думать, что перезапись двух строк, кода и пути, должно быть достаточно, и поэтому без этой повторной инициализации все элементы в отмеченном списке будут одинаковыми.
Вы имеете в виду, что они такие же, если вы _remove_ строка 'temp = new fooBar();'? –
Нет, поле для печати и проверки консоли отображается только в том случае, если эта строка присутствует, что не имеет для меня никакого смысла. – Bradley
Я имел в виду, что элементы в вашем проверочном поле выглядят одинаково, если эта строка _not_ присутствует, но (правильно) другая, если эта строка _is_ присутствует? –