Синтаксис для инициализации List <T>с существующими объектами List <T> - PullRequest
0 голосов
/ 10 сентября 2009

возможно ли инициализировать список другими списками в C #? Скажем, у меня есть эти списки:

List<int> set1 = new List<int>() {1, 2, 3};
List<int> set2 = new List<int>() {4, 5, 6};

То, что я хотел бы иметь, это сокращение для этого кода:

List<int> fullSet = new List<int>();
fullSet.AddRange(set1);
fullSet.AddRange(set2);

Заранее спасибо!

Ответы [ 4 ]

8 голосов
/ 10 сентября 2009

Чтобы разрешить дублирование элементов (как в вашем примере):

List<int> fullSet = set1.Concat(set2).ToList();

Это может быть обобщено для большего количества списков, то есть ...Concat(set3).Concat(set4). Если вы хотите удалить повторяющиеся элементы (те элементы, которые появляются в обоих списках):

List<int> fullSet = set1.Union(set2).ToList();
1 голос
/ 10 сентября 2009
        static void Main(string[] args)
        {
            List<int> set1 = new List<int>() { 1, 2, 3 };
            List<int> set2 = new List<int>() { 4, 5, 6 };

            List<int> set3 = new List<int>(Combine(set1, set2));
        }

        private static IEnumerable<T> Combine<T>(IEnumerable<T> list1, IEnumerable<T> list2)
        {
            foreach (var item in list1)
            {
                yield return item;
            }

            foreach (var item in list2)
            {
                yield return item;
            }
        }
0 голосов
/ 10 сентября 2009
List<int> fullSet = new List<int>(set1.Union(set2));

может работать.

0 голосов
/ 10 сентября 2009
var fullSet = set1.Union(set2); // returns IEnumerable<int>

Если вы хотите использовать List вместо IEnumerable , вы можете сделать:

List<int> fullSet = new List<int>(set1.Union(set2));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...