Добавление содержимого списков в другой список C #


158

У меня есть следующее:

  1. Основной список называется GlobalStrings
  2. Другой список называется localStrings

Например, в цикле:

List<string> GlobalStrings = new List<string>(); 
List<string> localStrings = new List<string>();
for(x=1;x<10;x++)
{
    localStrings.Add("some value"); 
    localStrings.Add("some value");
}
// Want to append localStrings to GlobalStrings as easily as possible

3
стек над потоком всегда качается ... хороший вопрос ...
Санграм Нандхиле

2
Вы делаете это неправильно, localStrings = new List<string>;должны быть поставлены перед forпетлей
Wassim AZIRAR

1
Васим, я думаю, именно поэтому он различает местное и глобальное; localStrings локально для области цикла for, GlobalStrings находится в глобальной области.
Dagrooms

Это плохой пример (который предлагает совершенно несостоятельно комментарии как Wassim в), так как очевидно , что вы могли бы просто , Addчтобы GlobalStringsвместо того , чтобы localStrings. И FWIW у вас цикл работает только 9 раз. Лучше было быfor (int x = 0; x < 10; ++x) {var localStrings = GetAListOfStrings(); /* append those to GlobalStrings */}
Джим Балтер

Ответы:



55
GlobalStrings.AddRange(localStrings);

Это работает.

Документация: List<T>.AddRange(IEnumerable<T>) .


2
Один персонаж потерял вам голос. Имейте в виду, это часто теряет вас гораздо больше! (Как сон или здравомыслие.)
deed02392 23.09.13

Будучи правильным, этот ответ теперь дублирует ответ Ли.
Cœur

22

Попробуйте AddRange-метод:

GlobalStrings.AddRange(localStrings);

Будучи правильным, этот ответ теперь дублирует ответ Ли.
Cœur

9

С Linq

var newList = GlobalStrings.Append(localStrings)

3
Добавить, кажется, не существует? У вас есть ссылка на документ MSDN для этого?
Под

2
Возможно, вы имели в виду Concat ... хотя это будет означать много копирования, и это хорошая иллюстрация того, как не использовать LINQ.
Джим Балтер

5

Вот мой пример:

    private List<int> m_machinePorts = new List<int>();

    public List<int> machinePorts
    {
        get { return m_machinePorts; }
    }

    Init()
    {
        // Custom function to get available ethernet ports
        List<int> localEnetPorts = _Globals.GetAvailableEthernetPorts();

        // Custome function to get available serial ports
        List<int> localPorts = _Globals.GetAvailableSerialPorts();

        // Build Available port list 
        m_machinePorts.AddRange(localEnetPorts);
        m_machinePorts.AddRange(localPorts);
     }

2

если вы хотите получить "кратко" :)

List<string>GlobalStrings = new List<string>(); 

for(int x=1; x<10; x++) GlobalStrings.AddRange(new List<string> { "some value", "another value"});
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.