Как объединить две коллекции в одну - PullRequest
3 голосов
/ 24 сентября 2011

У меня есть две коллекции, созданные в Silverlight, каждая коллекция создается в разное время разными методами.

Метод 1 создает список <> с названием человека (содержит поля имя, фамилия, возраст)

Метод 2 создает список <> с названием телефона (содержит номер телефона, номер ячейки)

Есть ли способ в SL объединить эти два списка в одну коллекцию, которая затем может быть привязана к представлению для отображения?

Пример: объединен в коллекцию, которая содержит все свойства (имя, возраст, номер телефона, номер ячейки)

1 Ответ

4 голосов
/ 24 сентября 2011

Вы ищете функцию Zip. Позволяет объединить 2 коллекции в одну, объединяя элементы каждой записи.

List<Type1> col1 = ...;
List<Type2> col2 = ...;
var combined = col1.Zip(col2, (x, y) => new {
  FirstName = x.FirstName,
  LastName = x.LastName,
  PhoneNumber = y.PhoneNumber,
  CellNumber = y.CellNumber });

Я не уверен, что Zip доступен не в Silverlight. Если нет, то вот определение этого

public static IEnumerable<TRet> Zip<T1, T2, TRet>(
  this IEnumerable<T1> enumerable1, 
  IEnumerable<T2> enumreable2,
  Func<T1, T2, TRet> func) {

  using (var e1 = enumerable1.GetEnumerator()) {
    using (var e2 = enumerable2.GetEnumerator()) {
      while (e1.MoveNext() && e2.MoveNext()) {  
        yield return func(e1.Current, e2.Current);
      }
    }
  }
}
...