要素が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 */
とか