我有类似的东西:
// Declarations:
List<SomeType> list1 = new List<SomeType>();
List<SomeType> list2 = new List<SomeType>();
...
SomeType something = new SomeType("SomeName");
list1.Add(something);
list2.Add(something);
...
list1[indexOfSomething] = new SomeType("SomeOtherName");
Run Code Online (Sandbox Code Playgroud)
并且list2中的对象不会更改...这是预期的结果吗?
Can*_*der 22
是的,但没有任何克隆.在分配之前,两个列表中都有相同的对象.赋值后,两个列表中有两个唯一对象.
做这个:
list1[indexOfSomething].name = "SomeOtherName";
Run Code Online (Sandbox Code Playgroud)
并且对象list2也将改变.
// Declarations:
List<SomeType> list1 = new List<SomeType>();
List<SomeType> list2 = new List<SomeType>();
...
SomeType something = new SomeType("SomeName");
list1.Add(something);
list2.Add(something);
Run Code Online (Sandbox Code Playgroud)
请记住,当您将对象添加到列表时,您实际上只是添加了一个指向该对象的指针.在这种情况下,list1和list2都指向内存中的相同地址.
list1[indexOfSomething] = new SomeType("SomeOtherName");
Run Code Online (Sandbox Code Playgroud)
现在,您已将元素list1分配给不同的指针.
你自己并不真正克隆对象,你正在复制恰好指向同一个对象的指针.如果您需要证明,请执行以下操作:
SomeType something = new SomeType("SomeName");
list1.Add(something);
list2.Add(something);
list1[someIndex].SomeProperty = "Kitty";
bool areEqual = list1[someIndex].SomeProperty == list2[someIndex].SomeProperty;
Run Code Online (Sandbox Code Playgroud)
areEqual应该是真的.指针摇滚!
| 归档时间: |
|
| 查看次数: |
13652 次 |
| 最近记录: |