2014-11-07 4 views
-1

Я следующий код:C# копировать значения из массива в список

for (int c = 0; c < date_old.Length; c++) 
{ 
    for (int d = 0; d < date_new.Length; d++) 
    { 
     newList[c] = data_old[c]; 

     if (date_old[c] == date_new[d]) 
     { 
      newList[c] = data_new[d]; 
     } 
    } 
} 

То, что я пытаюсь сделать, это следующее:

У меня есть четыре массива: date_new, date_old, data_new, data_old и a Список под названием newList. date_old и data_old имеют одинаковую длину и date_new и data_new тоже. Я хочу, чтобы в цикле даты проверялись, есть ли равные значения даты. Пока я делаю это, я хочу скопировать каждое значение из массива data_old в newList. Когда значение равно, я хочу скопировать значение в этой точке из позиции data_new в список. Здесь я получаю OutOfBoundException после второго цикла. Что не так?

+0

зависит от размера NewList – csharpwinphonexaml

+0

Как о «NewList = data_old.Distinct(). ToArray()» – faester

ответ

2

Это исключение вызывается при попытке чтения/записи в массив с индексом больше array.Length -1.

Дважды проверьте размер newList.

+0

но списки имеют переменный размер или я неправильно? Поэтому, когда я копирую значения из массива в список, мне не нужно объявлять размер. У меня есть var newList = новый Список (); – uzi42tmp

+0

Вы можете вставить инициализацию своего списка? –

+0

Список имеет переменную длину, но вам все равно придется явно изменять длину, добавляя к ней элементы. –

2

Убедитесь, что ваш newList конкретизируется в

var newList = new DateTime[Math.Max(date_old.Length, date_new.Length)]; 

Также убедитесь, что длина date_old равна длине data_old, то же самое для date_new и data_new.

Переместите newList[c] = data_old[c]; во внешнюю петлю, если вы можете (например, на строку 3), она перезапишет ваши новые данные, назначенные newList.

+0

ok Я заметил, что он копирует слишком много значений в массив, даже когда я перемещаю строку. Я просто хочу, чтобы он копировал каждую ценность один раз. – uzi42tmp

1
for (int c = 0; c < date_old.Length; c++) 
{ 
    for (int d = 0; d < date_new.Length; d++) 
    { 
     newList.Add((date_old[c] == date_new[d] ? data_new[d] : data_old[c])); 

    } 
} 

с список вашего решения и этой логики вы предоставили

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