RubyのCycle

ネットを見ていて、true, false, true...と繰り返すコードについての話題があり、そこでRubyにcycleなるものがあることを知りました。Rubyに対するアンテナが低くて・・・(^^;

C#のEnumerableクラスには同様のものはありませんが、自分で書くとこんな感じでしょうか?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sample
{
    static class Program
    {
        public static IEnumerable<T> Cycle<T> (this IEnumerable<T> e)
        {
            while (e.AsEnumerable().Any())
                foreach (var v in e.AsEnumerable())
                    yield return v;
        }

        static void Main (string args)
        {
            // 空の配列に対しては何もしない
            foreach (var t in new bool[0].Cycle ())
                Console.WriteLine (t);

            // Ture False True ...
            foreach (var t in new { true,false }.Cycle ())
                Console.WriteLine (t);
        }
    }
}

/* 結果
 True
 False
 True
 ...
 */

あまり出番は無さそうですが、ちょっと面白かったので。