-
我把结构体放进 List 里改它的字段,改了半天发现原数据纹丝不动,我盯着这个见了鬼的结果排查了大半天才搞懂值类型复制语义的深度复盘
我定义了个 struct(如 Point),放进 List 后想遍历改它的字段,结果改完原数据纹丝不动、修改压根没生效。我明明 var p = list[0]; p.X = 99 改了、p 也确实变了,可 list[0] 就是不变。深究才懂:struct 是值类型,赋值/传参传的是"拷贝"而非引用——var p = list[0] 拿到的是副本,改 p 改的是副本,list 里…- 0
- 0
-
把 List 里的 struct 取出来改了字段、列表里的原值却纹丝没动像没被改过:C# 值类型与引用类型分不清导致改了副本的避坑复盘
这是一个我明明改了它它却没变的诡异 bug,让我对 C# 里值类型和引用类型的区别有了刻骨铭心的理解。事情是这样的:我们有一个表示坐标点的结构体 struct Point,我把一堆这样的点装进了一个 List 里,某个逻辑需要修改列表里某个点的 X 坐标,我很自然地写了先把那个点取出来 var p = list0 改一下 p.X = 100。改完我满以为列表里的那个点就变成 X=100 了,可一打…- 0
- 0
引用类型
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!


