连接多个IEnumerable <t> </t>

时间:2014-11-21 08:25:09

标签: c# concatenation ienumerable

我试图实现一种方法来连接多个List,例如。

List<string> l1 = new List<string> { "1", "2" };
List<string> l2 = new List<string> { "1", "2" };
List<string> l3 = new List<string> { "1", "2" };
var result = Concatenate(l1, l2, l3);

但我的方法不起作用:

public static IEnumerable<T> Concatenate<T>(params IEnumerable<T> List)
{
    var temp = List.First();
    for (int i = 1; i < List.Count(); i++)
    {
        temp = Enumerable.Concat(temp, List.ElementAt(i));
    }
    return temp;
}

4 个答案:

答案 0 :(得分:60)

使用SelectMany

public static IEnumerable<T> Concatenate<T>(params IEnumerable<T>[] lists)
{
    return lists.SelectMany(x => x);
}

答案 1 :(得分:4)

只是为了完整性,另一个值得注意的方法是:

public static IEnumerable<T> Concatenate<T>(params IEnumerable<T>[] List)
{
    foreach (IEnumerable<T> element in List)
    {
        foreach (T subelement in element)
        {
            yield return subelement;
        }
    }
}

答案 2 :(得分:3)

如果你想使你的功能工作,你需要一个IEnumerable数组:

public static IEnumerable<T> Concartenate<T>(params IEnumerable<T>[] List)
{
    var Temp = List.First();
    for (int i = 1; i < List.Count(); i++)
    {
        Temp = Enumerable.Concat(Temp, List.ElementAt(i));
    }
    return Temp;
}

答案 3 :(得分:-2)

您所要做的就是改变:

public static IEnumerable<T> Concatenate<T>(params IEnumerable<T> lists)

public static IEnumerable<T> Concatenate<T>(params IEnumerable<T>[] lists)

请注意额外的[]