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

C#迭代器中ref局部变量报CS8176,是否等价于自定义辅助函数取值?

结论:两者完全不等同

原反编译代码中的ref Vector3 reference4 = ref vertices[vertexIndex + 3];是获取数组元素的托管引用,后续对reference4的赋值会直接修改vertices数组对应位置的原始值,这也是原代码修改网格顶点数据的核心逻辑。
而你实现的getElement方法返回的是Vector3的值拷贝,后续对reference3的修改只会作用于栈上的临时副本,不会改动原数组里的顶点数据,完全达不到原代码的功能效果。


报错原因

你遇到的CS8176错误是C#的语法限制:迭代器方法(包括Unity中返回IEnumerator的协程方法)会被编译器编译为状态机类,所有跨yield点的局部变量都会被提升为状态机的类字段,而ref局部变量属于托管指针,不允许作为类字段存在,因此编译器直接禁止在迭代器内声明ref局部变量。


正确修复方案

原代码用ref局部变量完全是冗余操作,你直接把4段ref相关的代码删掉,改成直接对数组元素赋值即可,功能和原代码完全一致,也不会触发报错:

// 删掉原来的ref声明和赋值,替换为下面4行
vertices[vertexIndex] = matrix.MultiplyPoint3x4(vertices[vertexIndex]);
vertices[vertexIndex + 1] = matrix.MultiplyPoint3x4(vertices[vertexIndex + 1]);
vertices[vertexIndex + 2] = matrix.MultiplyPoint3x4(vertices[vertexIndex + 2]);
vertices[vertexIndex + 3] = matrix.MultiplyPoint3x4(vertices[vertexIndex + 3]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:06:03