C# 中的 IndexOutOfRangeException – 为什么数组长度变为 0?

IndexOutOfRangeException in C# – Why has length of array become 0?

我在 C# 中有一段代码用值填充数组。在 Awake 方法中,我设置了 values 数组的长度,但是当我尝试在 setSample 方法中访问它时,它 returns 一个 IndexOutOfRangeException。

public int gridSize = 32;
public int width;
public int height;
public int featureSize = 32;
public float[] values;

public void Awake () {

    width = gridSize;
    height = gridSize;
    float[] values = new float[6 * width * height];
    Debug.Log("Array length: " + values.Length);

    for (int y = 0; y < height; y += featureSize) {
        for (int x = 0; x < width; x += featureSize) {
            setSample(x, y, Random.value);
        }
    }
}

public void setSample (int x, int y, float value) {
    Debug.Log("Array length: " + values.Length);
    values[((x & (width - 1)) + (y & (height - 1)) * gridSize)] = value;
}

我添加了 Debug.Log() 行,得到了以下输出:

数组长度:6144
数组长度:0
IndexOutOfRangeException: 数组索引超出范围。

方法和变量都是public,所以我不明白为什么会有任何访问问题。为什么数组在我声明后会发生变化?是不是全是空值?

您应该在唤醒方法中使用现有的 values,而不是再次声明。

改变

来自

 float[] values = new float[6 * width * height];

values = new float[6 * width * height];