如何将两个集合合并为一个集合

时间:2011-09-24 03:39:20

标签: .net silverlight generics collections

我在Silverlight中创建了两个集合,每个集合都是通过不同的方法在不同的时间创建的。

方法1创建一个List<>标题人物(包含字段名字,姓氏年龄)

方法2创建了一个List<>标题为电话(包含电话号码,手机号码)

SL中是否有办法将这两个列表组合成一个可以绑定到视图以进行显示的集合?

示例:合并到包含所有属性(名字,姓氏年龄,电话号码,手机号码)的集合中

1 个答案:

答案 0 :(得分:4)

您正在寻找Zip功能。它允许您通过组合eache的元素将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);
      }
    }
  }
}