【问题标题】:Values of Array are changed even though not passed a reference C# [duplicate]即使没有传递引用C#,数组的值也会发生变化[重复]
【发布时间】:2015-09-01 21:56:27
【问题描述】:

所以在下面的代码中,它是一个生成立方体面的简单脚本,我很好奇(并且只能在此处找到 C++ 示例)为什么 CreateTriangles 内部的 int[] 三角形能够从内部分配给即使我没有将它作为参考传递给 SetQuad。我对 C# 很陌生,所以如果这是一个愚蠢的问题,请原谅我,但从我在 MSDN 上读到的关于 refs 的内容来看,我显然不明白。 我原以为要获得这种效果,您需要使用“ref int[] ...”

 private static int SetQuad (int[] triangles, int i, int v00, int v10, int v01, int v11){
            triangles [i] = v00;
            triangles [i + 1] = triangles [i + 4] = v01;
            triangles [i + 2] = triangles [i + 3] = v10;
            triangles [i + 5] = v11;
            return i + 6;
        }

    private void CreateTriangles () {
        int quads = (xSize * ySize + xSize * zSize + ySize * zSize) * 2;
        int[] triangles = new int[quads * 6];
        int ring = (xSize + zSize) * 2;
        int t = 0, v = 0;
        for (int y = 0; y < ySize; y++, v++) {
            for (int q = 0; q < ring - 1; q++, v++) {
                t = SetQuad (triangles, t, v, v + 1, v + ring, v + ring + 1);
            }
            t = SetQuad (triangles, t, v, v - ring + 1, v + ring, v + 1);
        }
        t = CreateTopFace (triangles, t, ring);
        mesh.triangles = triangles;
    }

【问题讨论】:

    标签: c# methods parameter-passing


    【解决方案1】:

    如果您想将triangles 变量分配给其他数组并将该分配传播给调用者,您只需传递ref

    这就是ref 所做的,它允许传播分配。因为Array&lt;int&gt; 是一个引用类型,你已经在传递一个引用(按值),所以对对象状态的修改会被调用者自动“拾取”,因为它们都指向同一个对象。

    【讨论】:

      猜你喜欢
      • 2017-06-18
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 2015-03-15
      相关资源
      最近更新 更多