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 に答える