Iterazione in coppia in C # o enumeratore di windows scorrevoli

Se ho un IEnumerable come:

string[] items = new string[] { "a", "b", "c", "d" }; 

Vorrei passare attraverso tutte le coppie di articoli consecutivi (finestra scorrevole di dimensione 2). Quale sarebbe

 ("a","b"), ("b", "c"), ("c", "d") 

La mia soluzione era questa

  public static IEnumerable<Pair> Pairs(IEnumerable enumerable) { IEnumerator e = enumerable.GetEnumerator(); e.MoveNext(); T current = e.Current; while ( e.MoveNext() ) { T next = e.Current; yield return new Pair(current, next); current = next; } } // used like this : foreach (Pair pair in IterTools.Pairs(items)) { System.Out.PrintLine("{0}, {1}", pair.First, pair.Second) } 

Quando ho scritto questo codice, mi sono chiesto se ci sono già funzioni nel framework .NET che fanno la stessa cosa e lo fanno non solo per coppie ma per tuple di qualsiasi dimensione. IMHO ci dovrebbe essere un bel modo per fare questo tipo di operazioni con le windows scorrevoli.

Uso C # 2.0 e posso immaginare che con C # 3.0 (con LINQ) ci siano altri (e più belli) modi per farlo, ma sono principalmente interessato alle soluzioni C # 2.0. Tuttavia, apprezzerò anche le soluzioni C # 3.0.