代码之家  ›  专栏  ›  技术社区  ›  Mr. Boy

如何创建基于多个IEnumerable的集合

  •  3
  • Mr. Boy  · 技术社区  · 14 年前

    IEnumerable<X> IEnumerable<Y> IEnumerable<T> ?

    例子:

            IEnumerable<HeaderPart> headers = templateFile.MainDocumentPart.HeaderParts;
            IEnumerable<FooterPart> footers = templateFile.MainDocumentPart.FooterParts;
            List<OpenXmlPart> result = new List<OpenXmlPart>();
            result.Concat<OpenXmlPart>(footers);
    

    HeaderPart和FooterPart都是OpenXmlPart的子类,但第3行失败:

    不包含的定义 “Concat”和最佳扩展方法 超载 'System.Linq.Enumerable.Concat(System.Collections.Generic.IEnumerable,', 有一些无效参数

    foreach 在它上面。

    4 回复  |  直到 14 年前
        1
  •  6
  •   LukeH    14 年前

    您可以使用Cast函数来转换 IEnumerable<X> IEnumerable<T> 然后 Concat 附加第二个序列

    比如:

    listB.Cast<A>().Concat(listC.Cast<A>())
    
        2
  •  3
  •   Mark Byers    14 年前

    在C#/.NET4或更新版本中,您可以使用 Enumerable.Concat<T> :

    IEnumerable<T> result = xs.Concat<T>(ys);
    

    对于您的具体情况,您可以使用 List.AddRange

    List<OpenXmlPart> result = new List<OpenXmlPart>();
    result.AddRange(headers.Cast<OpenXmlPart>());
    result.AddRange(footers.Cast<OpenXmlPart>());
    
        3
  •  1
  •   Pontus Gagge    14 年前

    还没有测试过,也不知道它的现成功能,但是与其分配新的存储和移动数据 应该 EnumeratorBinder<T, X, Y> 模板类,绑定两个 IEnumerable 构造函数中的实例,以及 implement 有什么事

    IEnumerable<T> GetEnumerable()
    {
      foreach ( X x in _enumX )
        yield return x;
      foreach ( Y y in _enumY )
        yield return y;
    }
    

    使用合适的模板约束。。。

        4
  •  0
  •   Jürgen Steinblock    14 年前

    如果您确定IEnumerable是一个列表,那么可以使用AddRange()

    IEnumerable<int> list1 = new List<int>() { 1, 2, 3 };
    IEnumerable<int> list2 = new List<int>() { 4, 5, 6 };
    ((List<int>)list1).AddRange(list2);