planetz Ответов: 1

Индекс находится за пределами границы массива


Всем Привет,


Я объявил пустой строковый массив в c# и пытаюсь заполнить его некоторыми значениями. Но каждый раз он говорит: "индекс находится за пределами границы массива". Конечно, это означает, что значение, которое я пытаюсь вставить, выходит за пределы массива. Но я не могу найти ошибку в своем коде. Нужна помощь.
Вот мой код:

string[] week = new string[0];
int loop=14;

for(int i=1;i<=loop;i++)
   {
     weekNo=i+10;
     week[i-1]=weekNo.ToString(); //this line has error
}


Что я уже пробовал:

Я попытался объявить массив другими способами
string[] week = new string[0];
string[] week = new string[]{};
string[] week = new string[0]{};
string[] week = new string[0] {};

Но там говорится о той же ошибке.

1 Ответов

Рейтинг:
7

OriginalGriff

Когда вы объявляете массив, вы точно указываете, сколько элементов он может содержать, и это число никогда не может измениться. Он не может подняться, он не может спуститься. Итак, когда вы говорите это:

string[] week = new string[0];
Вы объявляете переменную с именем week, которая содержит ссылку на массив, который может содержать нулевые строки. Это означает, что любое значение индекса будет автоматически находиться за пределами массива.
Если вы знаете, сколько элементов вы хотите сохранить, используйте это в определении:
int loop=14;
string[] week = new string[loop];
 
for(int i=1;i<=loop;i++)
   {
   int weekNo=i+10;
   week[i-1]=weekNo.ToString(); 
   }
Если вы этого не сделаете, то не используйте массив, используйте список<T>:
List<string> week = new List<string>();
int loop=14;
for(int i=1;i<=loop;i++)
   {
   int weekNo=i+10;
   week.Add(weekNo.ToString());
   }
Впоследствии вы можете использовать индексацию коллекции для доступа к отдельным элементам, если это необходимо.


planetz

Отлично!! Список сработал!! Спасибо!!

OriginalGriff

Всегда пожалуйста!