Wer*_*ner 2 c# unity-game-engine
我有2个静态方法,只有一个做了我想做的事情,我无法弄清楚另一个有什么问题.更具体地说,Method_A似乎不生成其参数的实例,并且在main中创建的同一变量上运行,而B似乎在实例上运行.
public static Method_A(Vector2[] in, int n)
{
for(int i = 0; i < in.Length; i++)
{
in[i].x = n;
in[i].y = n;
}
}
public static Method_B(Vector2 in, int n)
{
in.x = n;
in.y = n;
}
Run Code Online (Sandbox Code Playgroud)
然后从主要:
// This works, and changes values directly in "test"
Vector2[] test = meshFilter.uv;
Method_A(test, n);
meshFilter.uv = test;
// This FAILS, doesn't affect test
Vector2 test = meshFilter.uv[i];
Method_B(test, n);
meshFilter.uv[i] = test;
// This also FAILS, doesn't affect test
Vector2[] t = meshFilter.uv
(...for loop...){
Vector2 test = t[i];
Method_B(test, n);
t[i] = test;}
meshFilter.uv = t;
Run Code Online (Sandbox Code Playgroud)
我希望方法B能够处理原始变量,而不是某些实例......我该怎么做才能确保这一点?
如果需要更多详细信息,请与我们联系.
谢谢.
这就是值类型在C#中的工作方式.如果要对原始结构进行操作,则需要通过引用传递它.
public static Method_B(ref Vector2 in, int n)
{
in.x = n;
in.y = n;
}
Run Code Online (Sandbox Code Playgroud)
此外,您需要指定它已在呼叫站点通过引用传递.
Method_B(ref test, n);
Run Code Online (Sandbox Code Playgroud)
您的数组不需要这样,因为数组是引用类型.它们通过引用[1]传递,因此您Method_A正在处理原始数组.
[1]为了迂腐,数组变量(例如Vector2[] arr是数组变量)实际上是对数组的引用.值arr默认值按值传递,因为这是对数组的引用,所以它具有通过引用传递数组的效果.
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |