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



我有一段 C# 代码,用值填充数组。在Awake方法中,我设置了values数组的长度,但是当我尝试在setSample方法中访问它时,它会返回一个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
索引超出范围异常:数组索引超出范围。

方法和变量都是公共的,所以我不明白为什么会出现任何访问问题。为什么数组在我声明后会发生变化?是因为它充满了空值吗?

与其再次声明,不如在 awake 方法中使用现有的 values

改变

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

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

相关内容

  • 没有找到相关文章

最新更新