Ich habe einen Code in C#, der ein Array mit Werten füllt. In der Awake
Methode habe ich die Länge der values
Array, aber wenn ich versuche, es in der setSample
Methode zugreifen, gibt es eine IndexOutOfRangeException zurück. DieIndexOutOfRangeException in C# - Warum ist Array-Länge 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;
}
ich hinzugefügt, um die Debug.Log()
Linien, die gab mir die folgende Ausgabe:
Array Länge: 6144
Array Länge: 0
IndexOutOfRangeException: Array-Index außerhalb des zulässigen Bereichs .
Sowohl die Methoden als auch die Variablen sind öffentlich, daher sehe ich nicht, warum es Zugriffsprobleme geben sollte. Warum ändert sich das Array, nachdem ich es deklariert habe? Liegt es daran, dass es voller Nullwerte ist?
BTW * Ist es, weil es voll von Nullwerten ist * nicht der Fall ist -, wenn Sie das Array initialisieren Es wird mit dem Standardwert des Typs gefüllt - der für "float" ist 0 und nicht null –
Sie haben definiert eine lokale Variable namens "values" wie in der Klasse. So erhalten Sie 'null Objektreferenzfehler' in' setSample() 'nicht' index out of range exception. Mit welchen Werten von 'x' und' y' in 'setSample()' erhalten Sie 'index out of range error'? –