我在C#中有一段代碼用數值填充數組。在Awake
方法中,我設置了values
數組的長度,但是當我嘗試在setSample
方法中訪問它時,它將返回IndexOutOfRangeException。所述C#中的IndexOutOfRangeException - 爲什麼數組的長度變爲0?
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:數組索引超出範圍。
這兩種方法和變量都是公開的,所以我不明白爲什麼應該有任何訪問問題。爲什麼在聲明之後數組發生了變化?是因爲它充滿了空值嗎?
BTW *是不是因爲它是全空值*的情況並非如此 - 當你初始化數組它將被填入默認的類型 - 'float'爲0且不爲空 –
您已經定義一個名爲'values'的局部變量與該類中的相同。所以你在'setSample()'中得到'null object reference error'而不是索引超出範圍異常。用'setSample()'中'x'和'y'的值,你會得到'index out of range error'? –