是否有一个更优雅的解决方案,可以将项目添加到IEnumerable而不是
myNewIEnumerable = myIEnumerable.Concat ( Enumerable.Repeat (item, 1) );
某些背景信息:
public void printStrings (IEnumerable<string> myStrings) {
Console.WriteLine ("The beginning.");
foreach (var s in myStrings) Console.WriteLine (s);
Console.WriteLine ("The end.");
}
...
var result = someMethodDeliveringAnIEnumerableOfStrings ();
printStrings (result.Concat ( Enumerable.Repeat ("finished", 1) ) );
答案 0 :(得分:5)
当然,有。 Concat()接受任何IEnumerable<T>
,包括数组:
var myNewIEnumerable = myIEnumerable.Concat(new[] { item });
答案 1 :(得分:2)
将单个元素附加到IEnumerable<T>
的最简单方法是使用此AsIEnumerable
扩展名(尽管Eric Lippert advises against为对象创建扩展名):
public static IEnumerable<T> AsIEnumerable<T>(this T obj)
{
yield return obj;
}
var appended = source.Concat(element.AsIEnumerable())
或使用此Append<T>
扩展程序:https://stackoverflow.com/a/3645715/284240
答案 2 :(得分:1)
您可以像这样定义自己的SingleConcat扩展方法
public static class CustomConcat
{
public static IEnumerable<T> SingleConcat<T>(this IEnumerable<T> first, T lastElement)
{
foreach (T t in first)
{
yield return t;
}
yield return lastElement;
}
}
class Program
{
static void Main(string[] args)
{
List<int> mylist = new List<int> { 1 , 2 , 3};
var newList = mylist.SingleConcat(4);
foreach (var s in newList)
{
Console.WriteLine(s);
}
Console.Read();
}
}
这应该打印 1,2,3后跟4