将单个项添加到不可数

时间:2012-07-13 20:10:19

标签: c# linq

是否有一个更优雅的解决方案,可以将项目添加到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) ) );

3 个答案:

答案 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