2015-04-30 3 views
-2

Я получаю странный Индекс вне диапазона Исключение.C# IndexOutOfRangeException необъяснимый

Вот мой фрагмент кода:

string[] st2 = **An Array of up to 10**; 

// If not enough in st2, add from st 
if (st2.Length < 10) 
{ 
    string[] st = **An Array of up to 10**; 
    try 
    { 
     int index = 0; 
     for (int i = st2.Length - 1; i < 10; i++) 
     { 
      st2[i] = st[index]; 
      index = index + 1; 
     }%%% 
    } 
    catch (IndexOutOfRangeException) 
    { 

    } 
} 

Я поставил попытаться поймать, чтобы увидеть, если я мог бы просто игнорировать исключение, однако, что не работает.

Исключение составляет %%%. Есть идеи? Я пошел в отладку только для того, чтобы убедиться, что это не один из массивов, и в обоих случаях i и индекс оба приемлемы. (выбрасывается при индексе = 1, хотя st подтверждается 10 в длину)

+1

Вы пытались очистить решение и перезапустить Visual Studio? ' –

+0

Почему бы не 'for (int i = 0; i Tim

+0

Цикл будет получать доступ к 'st2 [st2.length]' на своей итерации execond, которая не поддается окончанию. Вы не можете увеличить .net-массивы, назначив неиспользуемые индексы. – CodesInChaos

ответ

0

Ваш массив предоставляет это исключение. Потому что его размер меньше, чем 10. Вы должны скопировать st2 и st в новый массив размером 10. потом назначить его st2

string[] st2 = **An Array of up to 10**; 

// If not enough in st2, add from st 
if (st2.Length < 10) 
{ 
    string[] st = **An Array of up to 10**; 
    try 
    { 
     string[] st3 = new string[10]; 
     Array.Copy(st2, st3, st2.Length); 
     int index = 0; 
     for (int i = st2.Length; i < 10; i++) 
     { 
      st3[i] = st[index]; 
      index = index + 1; 
     } 
     st2 = st3; 
    } 
    catch (IndexOutOfRangeException) 
    { 

    } 
    } 
0

Переменная st имеет только 1 элемент, см. следующую строку: st3 [i] = st [index] ;. Я перехожу от 0 до 9, и исключение возникает, когда i = 1.

+0

Hiya там, хотя это вполне может ответить на вопрос, пожалуйста, имейте в виду, что другие пользователи могут быть не такими знающими, как вы. Почему бы вам не добавить небольшое объяснение, почему это на самом деле проблема? Благодаря! – Vogel612

Смежные вопросы