Добрый день!
Чувствую, что чего-то не понимаю, а вот чего...
Есть WinForms приложение, там есть некий диалог редактирования списка элементов, создаю его вот так:
MyDialog dlg = new MyDialog(objectsList);
if (dlg.ShowDialog(this) != DialogResult.OK)
return;
saveObjects(dlg.objectsList);
В конструкторе MyDialog я просто сохраняю objectsList в переменную член класса. В самом диалоге есть кнопки add, edit, remove. Пусть пользователь нажал Remove, я удалил объект из списка, а потом пользователь нажал на Cancel в диалоге. Т.е. он не хочет удалять этот объект, вообще все действия должны быть отменены.
А по факту получается, что в objectsList уже этого объекта нет (он был удален в обработчике кнопки Remove). Как я понимаю, это из-за того, что объекты передаются по ссылке. Т.е. objectsList и dlg.objectsList указывают на один список. Как же быть в этом случае? Делаю копию списка (со всеми его элементами)? Или хранить список операций и их атрибутов (скажем, 2 раза нажали Remove, удалив 2объекта, потом нажали Edit, потом add)? Но это ведь очень муторно?
Извиняюсь за тупой вопрос, но правда не понимаю. В C++ это проще, мы там сами управляем свойствами объектов (ссылка, копия и пр)
Заранее спасибо за ответ