我有以下代码:
List<Foo> test = new List<Foo>();
test.Add(new Foo(2));
List<Foo> test2 = new List<Foo>();
test2.Add(test[0]);
test2[0] = new Foo(3);
当我将新对象分配给test2[0]
时,test[0]
会不更改。如何更改test[0]
到test2[0]
?
编辑:
好的,所以我已经有了两个对象。最后,我想将第一个对象更改为第二个对象。
Foo bar0 = new Foo(2);
Foo bar1 = new Foo(3);
List<Foo> test = new List<Foo>();
test.Add(bar0);
List<Foo> test2 = new List<Foo>();
test2.Add(test[0]);
// now what?
答案 0 :(得分:1)
执行此操作时:
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
成员会反映出该班级所有实例的变化。
答案 1 :(得分:0)
它们是2个不同的列表,2个不同的实例,除非你这样做,否则你不能这样做:
test2 = test
你能解释为什么你需要按照你的方式完成它吗?