要素が0個、1個、N個

http://blogs.wankuma.com/episteme/archive/2007/10/28/104563.aspx
επιστημηさんのところより。

StringBuilderだとメモリが気になる人向け。

using System;
using System.Collections.Generic;

class Program {
    static void Dump<T>(IEnumerable<T> objs)
    {
        IEnumerator<T> it = objs.GetEnumerator();
        if (it.MoveNext()) Console.Write (it.Current);
        while (it.MoveNext()) Console.Write ("," + it.Current);
        Console.WriteLine ();
    }

    static void Main()
    {
        Dump(new int  {});
        Dump(new int  {1});
        Dump(new int  {1,2});
        Dump(new int  {1,2,3});
    }
}

foreachのお陰でIEnumeratorの影が薄い・・・

(追記)Console.Write決め打ちなのが気に入らない?
そんな時はyieldで。

using System;
using System.Collections;

class Program {
    static IEnumerable Dump(IEnumerable objs)
    {
        IEnumerator it = objs.GetEnumerator();
        if (it.MoveNext()) yield return it.Current;
        while (it.MoveNext()) 
        {
            yield return ",";
            yield return it.Current;
        }
    }

    static void Out(IEnumerable objs)
    {
        foreach (object o in objs)
            Console.Write (o);
        Console.WriteLine();
    }

    static void Main()
    {
        Out(Dump(new int {}));
        Out(Dump(new int {1}));
        Out(Dump(new int {1,2}));
        Out(Dump(new int {1,2,3}));
   }
}

/*
 
1
1,2
1,2,3
 */

とか