なるほど。 2 の場合もですか。驚きです。

2 の場合、型情報が IEnumerable<T> に落とされている為、
IEnumerable<T>.GetEnumerator() が呼び出され、
IEnumerator<T> にボクシングされると思ったのですが、
違うのですね。


何故違うのかが理解できません。
本来、以下のどれが正しいのでしょうか ?
a. Generic は型パラメータが値型の場合のみ特殊化されるのではなく、そもそも共通部分をまとめているだけ (参照型はほぼ共通のコードが使用出来る)
b. Generic に限らず Interface 型 (参照型) を引数に取っていても、a のように処理される。
c. 特殊化という考え自体が間違いで、見当はずれ