2014-11-18 2 views
0

У меня есть список o, который имеет строки:Как добавить данные из списка на новый []

"Hist 2368#19:00:00#20:30:00#Large Conference Room", 
    "Hist 2368#09:00:00#10:30:00#Large Conference Room", 

Я хочу, чтобы добавить эти строки так:

var lines = new[] 
{ 
    "Meeting#19:00:00#20:30:00#Conference", 
}; 

Как бы я используйте данные из списка o и вставьте его в lines?

+1

List.toArray: http://msdn.microsoft.com /en-us/library/x303t819(v=vs.110).aspx – Alexandru

+0

Возможно, вам не следует использовать массив. – SLaks

+3

'lines = o.ToArray()' даст вам массив из списка, но он не изменит содержимое, как вы. – Habib

ответ

5

Array - натура, фиксированная длина. Вам нужно создать новый массив и назначить его lines.

lines = lines.Concat(o).ToArray(); 

В качестве альтернативы,

lines = o.AddRange(lines).ToArray(); 

UPDATE: Исправлена ​​ошибка немым.

+1

Я думаю, что вторая строка должна иметь 'AddRange', +1. – Habib

+0

D'oh! Спасибо ... –

1

Поскольку линии уже массив, вам необходимо объединить значения в списке первым:

foreach (var item in lines) 
    o.Add(item); 

Затем измените о в массив:

o.ToArray(); ///returns String[] with all three values. 

Вы также можете использовать. concat(), как указывали другие, что внутренне сделает то же самое.

1

Дополнительная информация: lines переменная имеет тип Array(T), который является фиксированным, поэтому вы должны либо выделить достаточно места для хранения всех данных, либо скопировать данные в новую конструкцию.

Если выделено достаточно места для lines, чтобы вместить все данные, то это выглядит примерно так:

var o = new List<string> 
{ 
    "Hist 2368#19:00:00#20:30:00#Large Conference Room", 
    "Hist 2368#09:00:00#10:30:00#Large Conference Room", 
}; 
var lines = new string[3] { "Meeting#19:00:00#20:30:00#Conference", null, null }; 
// Copy the data from o to the end of lines 
o.CopyTo(lines, 1); // Start a 1 to not overwrite the existing data 

Смотрите также:

В противном случае, если у вас есть два разных источника данных, которые вы хотите объединить в новую конструкцию, тогда я рекомендую использовать Concat. Это объединит типы IEnumerable(T), которые вы можете использовать ToArray или ToList, чтобы предоставить данные в правильном контейнере.

var o = new List<string> 
{ 
    "Hist 2368#19:00:00#20:30:00#Large Conference Room", 
    "Hist 2368#09:00:00#10:30:00#Large Conference Room", 
}; 

var lines = new[] 
{ 
    "Meeting#19:00:00#20:30:00#Conference", 
}.Concat(o).ToArray(); 

Убедитесь, что вы знаете, что container you want to use.

+0

+1 для максимально возможного сохранения исходного кода, объединяя буквенную конструкцию 'new []' и неявный вызов IEnumerable (T) :: Concat. – AlexanderBrevig

0

Просто это

lines = lines.Concat(o).ToArray(); 
0

Попробуйте это:

 List<string> myList = new List<string>() 
     { 
      "My First String in List", 
      "My Second String in List" 
     }; 

     string[] myArray = new string[] { "My Array First String" }; 

     List<string> myArrayList = new List<string>(); 
     foreach (var item in myArray) 
     { 
      myArrayList.Add(item); 
     } 
     foreach (var item in myList) 
     { 
      myArrayList.Add(item); 
     } 
     foreach (var item in myArrayList) 
     { 
      Console.WriteLine(item); 
     } 
     Console.Read(); 
Смежные вопросы