C#中两个列表添加同一对象后,元素是否指向同一实例?
问题解答
是的,mySteps[i]和secondList[i]指向同一个对象,执行mySteps[i].someValue = 13;后,secondList[i].someValue也会等于13。
核心原因
在C#中,someOtherClass作为类属于引用类型。当你执行new someOtherClass()时,会在堆内存中创建该类的实例,列表中存储的并不是对象本身,而是指向这个实例的引用地址。
你的代码逻辑里:
- 先创建
someOtherClass实例,把它的引用加入mySteps - 再将
mySteps[i](即同一个实例的引用)加入secondList
这就导致两个列表的对应位置存的是同一个实例的引用,它们指向堆内存里的同一个对象。所以不管通过哪个列表的引用修改对象属性,本质都是修改同一个内存中的对象,另一个列表的引用自然能看到这个变化。
补充提示
如果someOtherClass是值类型(比如结构体),情况会完全不同——列表存储的是对象的副本,修改其中一个列表的元素属性,另一个列表的元素不会受影响。但从代码命名和写法来看,someOtherClass是类,属于引用类型,所以符合上面的结论。
内容的提问来源于stack exchange,提问作者ReelThymeOS
相关产品推荐
相关产品推荐

