Ответ 1
Используйте SelectMany
:
public static IEnumerable<T> Concatenate<T>(params IEnumerable<T>[] lists)
{
return lists.SelectMany(x => x);
}
Я пытаюсь реализовать метод для объединения нескольких 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;
}
Используйте SelectMany
:
public static IEnumerable<T> Concatenate<T>(params IEnumerable<T>[] lists)
{
return lists.SelectMany(x => x);
}
Просто для полноты еще один заслуживающий внимания подход:
public static IEnumerable<T> Concatenate<T>(params IEnumerable<T>[] List)
{
foreach (IEnumerable<T> element in List)
{
foreach (T subelement in element)
{
yield return subelement;
}
}
}
Если вы хотите, чтобы ваша функция работала, вам нужен массив 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;
}
Все, что вам нужно сделать, это изменить:
public static IEnumerable<T> Concatenate<T>(params IEnumerable<T> lists)
в
public static IEnumerable<T> Concatenate<T>(params IEnumerable<T>[] lists)
Обратите внимание на дополнительные []
.