You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中两个列表添加同一对象后,元素是否指向同一实例?

问题解答

是的,mySteps[i]和secondList[i]指向同一个对象,执行mySteps[i].someValue = 13;后,secondList[i].someValue也会等于13。

核心原因

在C#中,someOtherClass作为类属于引用类型。当你执行new someOtherClass()时,会在堆内存中创建该类的实例,列表中存储的并不是对象本身,而是指向这个实例的引用地址。

你的代码逻辑里:

  1. 先创建someOtherClass实例,把它的引用加入mySteps
  2. 再将mySteps[i](即同一个实例的引用)加入secondList

这就导致两个列表的对应位置存的是同一个实例的引用,它们指向堆内存里的同一个对象。所以不管通过哪个列表的引用修改对象属性,本质都是修改同一个内存中的对象,另一个列表的引用自然能看到这个变化。

补充提示

如果someOtherClass是值类型(比如结构体),情况会完全不同——列表存储的是对象的副本,修改其中一个列表的元素属性,另一个列表的元素不会受影响。但从代码命名和写法来看,someOtherClass是类,属于引用类型,所以符合上面的结论。

内容的提问来源于stack exchange,提问作者ReelThymeOS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:37:13