5

是否有比这更优雅的解决方案将项目添加到 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) ) );
4

3 回答 3

5

当然,有。Concat()接受任何IEnumerable<T>,包括数组:

var myNewIEnumerable = myIEnumerable.Concat(new[] { item });
于 2012-07-13T20:11:30.203 回答
2

也许将单个元素附加到 an 的最简单方法IEnumerable<T>是使用此AsIEnumerable扩展名(尽管Eric Lippert 建议不要为对象创建扩展名):

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

于 2012-07-13T20:32:13.207 回答
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

于 2012-07-13T20:24:48.530 回答