>>207
void Method<S, T>(S source) where S : IEnumerable<T> の間違いだよな?
よく考えてみるとわかるが、意味ないんだよそれ
void PrintAll<S, T>(S source) where S : IEnumerable<T> {
 foreach (T item in source) Console.WriteLine(item);
}
foreachを展開すれば次のコードと等価
IEnumerator<T> e = source.GetEnumerator();
while (e.MoveNext()) { T item = e.Current; Console.WriteLine(item); }
foreachのボックス化を避けるにはIEnumerable<T>.GetEnumeratorを明示的実装して
構造体を返すようにパブリックなGetEnumeratorをオーバーロードするんだけど、
この場合はIEnumerable<T>インターフェイスを通してGetEnumeratorを呼び出すので、
source.GetEnumerator()の戻り値はIEnumerator<T>にボックス化されて返ってくる