Объединение нескольких списков в C #

Я ищу элегантное решение для следующей ситуации:

У меня есть класс, содержащий список типа

class MyClass{ 
...
 public List<SomeOtherClass> SomeOtherClassList {get; set;}
...
}

. Третий класс с именем Модель содержит List , с которым я работаю из extern.

Теперь я хотел бы расширить класс Model с помощью метода, который возвращает все уникальные экземпляры SomeOtherClass по всем экземплярам MyClass.

Я знаю, что есть метод Union () , и с помощью цикла foreach я мог легко решить эту проблему, что я и сделал. Однако, поскольку я новичок во всех функциях C # 3 +, мне любопытно, как этого можно добиться более элегантно, с Linq или без него.

Я нашел подход, который мне кажется довольно неуклюжим, но он работает:

        List<SomeOtherClass> ret = new List<SomeOtherClass>();
        MyClassList.Select(b => b.SomeOtherClasses).ToList().ForEach(l => ret = ret.Union(l).ToList()); 
        return ret;

Примечание. Свойство b.SomeotherClasses возвращает List .

Этот код далек от совершенства, и некоторые вопросы возникают из-за того, что у меня чтобы понять, какой стиль подходит для работы с C # 3, а какой нет. Итак, я составил небольшой список мыслей об этом фрагменте, о котором я был бы рад получить несколько комментариев. Кроме того, я был бы рад услышать несколько комментариев о том, как еще улучшить этот код.

  • Временный список ret , возможно, был бы частью подхода в C # 2, но правильно ли это что я смогу отказаться от этого списка, используя вместо этого цепочку методов? Или я упустил суть?
  • Действительно ли требуется использовать промежуточный метод ToList () ? Все, что я хочу, - это выполнить дополнительное действие для каждого члена выборки.
  • Какова стоимость этих операций ToList ()? Они в хорошем стиле? Необходимо?

Спасибо.

13
задан Dr.Elch 4 August 2011 в 21:13
поделиться