ふらっとVisual C#,C♯,C#(初心者用) Part105
■ このスレッドは過去ログ倉庫に格納されています
0208デフォルトの名無しさん
2013/07/21(日) NY:AN:NY.ANvoid 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>にボックス化されて返ってくる
■ このスレッドは過去ログ倉庫に格納されています