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

C#中使用ref返回结构体却出现复制问题排查

问题根源:调用时未用ref变量接收返回的结构体引用

你所有方法的ref返回声明都是正确的,复制发生在调用代码的变量赋值阶段:

var sprite = result.GetComponent<Sprite>();

这里的var sprite是普通的结构体变量,即便GetComponent<T>()返回的是ref T,如果不用ref关键字修饰变量,C#会自动把返回引用指向的结构体值复制一份到sprite变量中。后续对sprite的修改(比如sprite.Initialise(...)、sprite.Origin = ...)都是在操作这个副本,而非数组中存储的原结构体,所以再次调用GetComponent<Sprite>()时看不到修改效果。

修复方法

将变量声明改为ref var,直接持有原结构体的引用:

ref var sprite = ref result.GetComponent<Sprite>();
sprite.Initialise(spriteTexture, new Point(0, 160), 32, 2, 0.17f);
sprite.Origin = new Vector2(0, 0);

同理,另一处调用也需要修改:

ref var gameObjectData = ref result.GetComponent<GameObjectData>();
gameObjectData.ShowDebugInfo = false;

补充说明

C#中,ref返回的引用必须被ref变量接收才能保持引用关系。如果省略ref,编译器会执行隐式的值复制——这是结构体值类型的核心特性:默认所有赋值操作都是值复制,除非显式用ref、in或out关键字传递引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 08:58:26