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];
我在 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];