Вот небольшая часть программы, над которой я работаю. Я пытаюсь вручную изменить размер массива, создав еще один массив, скопировав все элементы из первого массива во второй, а затем получив первый массив со вторым.Почему индекс выходит за пределы массива, когда я изменяю размер массива?
RoundInfo[] rounds = new RoundInfo[10];
int numRounds = 0;
RoundInfo ri;
RoundInfo[] newRI;
public void AddRound(int height, int speed)
{
if (numRounds >= rounds.Length) // creates a new array of RI objects if numRounds is greater than rounds.Length
{
newRI = new RoundInfo[numRounds + 1];
// Console.WriteLine("numRounds: {0} length: {1}", numRounds, rounds.Length); // me checking if the AddRound correctly increments numRounds, it does.
//Console.WriteLine(newRI.Length);
for (int i = 0; i < newRI.Length; i++)
newRI[i] = rounds[i]; // *THE PROGRAM CRASHES HERE*
rounds = newRI;
ri = new RoundInfo(height, speed);
rounds[numRounds] = ri;
numRounds++;
}
if (numRounds < rounds.Length) // the program goes through this fine
{
ri = new RoundInfo(height, speed);
rounds[numRounds] = ri;
numRounds++;
}
}
Я не понимаю, почему он сработает, если новый массив длиннее.
'newRI' может пойти 'newRI.Length', но не старый. Ничего из этого не требуется с «List», и даже если вы «имели» использовать массив, есть «Array.Copy» –
Plutonix