Когда вы сделаете это:
test2[0] = new Foo(3);
Вы не изменяя объект в test2[0]
, вы изменяете test2
сам. И модификация, которую вы делаете, заключается в том, что вы помещаете новый объект в определенный индекс.
Это ничего не делает для объекта, который раньше был там. Не стоит.
Если вы хотите изменить объект, который есть, вы можете изменить его напрямую:
test2[0].SomeProperty = someValue;
И наоборот, если вы хотите test2
и test
быть тот же набор (так что изменение одного также модифицирует другой) , а затем сделать их же коллекции:
List<Foo> test = new List<Foo>();
//...
List<Foo> test2 = test;
Но пока test
и test2
две отдельные экземпляры, то изменения в одной не отражаются в другом. Опять же, и не должно быть.
Если вы хотите этого поведения (модификации одного экземпляра, отражаясь в другом), то вы, вероятно, придется создать свою собственную реализацию коллекции. Который не должен быть ужасно трудным. Просто создайте пользовательский класс, который наследуется от IList<T>
. В реализации этого класса вы могли бы сохранить данные резервного копирования для коллекции в свойстве static
.
Я не уверен, какие другие побочные эффекты могут иметь, так как я никогда не слышал о желании этого поведения раньше. Но, по крайней мере, член static
будет отражать изменение во всех экземплярах класса.
Если вы редактируете объект вместо его замены, он будет делать то, о чем вы думаете. – Vlad274
Простейшим способом является просто «List test2 = test'. Хотя я не знаю, действительно ли это нужно. –
@ Vlad274: Я хочу заменить объект. – gartenriese