Как я могу составить список <type>? - PullRequest
1 голос
/ 18 ноября 2011

У меня есть этот код:

protected IList<MyObject> offerte;

offerte = offerte.Union(from MyObject object in MyObjects
                        select object).ToList();

но я получаю System.ArgumentNullException (возможно, потому что я добавляю IEnumerable <> в список <>).

Итак, как я могу объединить List <>?

Ответы [ 4 ]

7 голосов
/ 18 ноября 2011

Объединение не является конкатенацией, проверьте: http://msdn.microsoft.com/en-us/library/bb341731.aspx. Объединение 2 наборов с одинаковыми значениями, например, даст одинаковый точный набор.

Вам нужно Concat (сюрприз, сюрприз):

offerte = offerte.Concat(from MyObject object in MyObjects
                    select object).ToList();

Однако ArgumentNullException по-прежнему будет возникать, причина offerte не инициализирована (проверьте ответ devdigital ').

4 голосов
/ 18 ноября 2011

Вы получаете исключение, потому что offerte равно нулю. Попробуйте:

offerte = new List<MyObject>(MyObjects);
2 голосов
/ 18 ноября 2011

Основное различие между объединением и объединением состоит в том, считаете ли вы, что ваши данные являются наборами или последовательностями.

В случае объединения вы объедините два набора данных, то есть, если у вас есть одно значение в обоих списках, оно будет сохранено только один раз, поэтому объединение {1, 2, 3} и {2, 3, 4} даст вам {1, 2, 3, 4} (при условии, что вы Пользовательский тип данных реализует интерфейс approriate и переопределяет хеш-функцию, чтобы включить сравнение на равенство в LINQ).

Если вы хотите объединить ваши данные, то вторая часть будет просто добавлена ​​к первому параметру, и вы получите {1, 2, 3, 2, 3, 4}.

Что именно вы хотите сделать со своими данными?

P.S. И вы не можете получить half-Enumerable и half-List, каждый List является IEnumerable, так как List реализует этот интерфейс. Поскольку LINQ оценивается лениво, вы получите только запрос. В вашем случае вы вызываете его нетерпеливую оценку, вызывая метод .ToList().

1 голос
/ 18 ноября 2011

попробуйте это ...

protected IList<MyObject> offerte = new  List<MyObject>(MyObjects); 

// do your stuff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...