http://blogs.wankuma.com/rti/archive/2007/04/06/70413.aspx
IEnumerable を使ってみる
上記にて、皆さんにいただいたコメントを読んで、元記事の表現がわかりにくく、しかも一部間違っていたことに気付きました。
単なる苦労話の日記というつもりで書いてしまったためだと思うのですが、技術文章として参考にする人がいた時に、逆に惑わせてしまう危険性もあるので、今回きちんとまとめなおすことにします。
前記事でコメントをいただいた方々、本当にすみませんでした。
<(_@_)>
さて、お詫びも済んだところで、僕がやりたかったことを書きます。
以下、C# のコードです。
public class あいてむ {
public string 名前;
// その他、いろいろなメンバ
}
上記のオブジェクトのコレクションクラスを作る場合です。
コレクションクラスを作るとは言いましても、これが主体ということではなく、コレクションクラスとしても動作するクラスと言う方が正しいでしょうか(要するに、基本クラスが既にある訳です)
従って、核となるコレクションクラスをラッピングしなければならないので、IEnumerable インターフェイスを実装して、外部からの foreach に対応させる必要が生じます。
public class あいてむコレクション : 基本クラス, IEnumerable
{
Dictionary dic = new Dictionary();
public IEnumerator GetEnumerator() {
return this.dic.Values.GetEnumerator();
}
public あいてむ this[string index] {
get {
return this.dic[index];
}
}
public void Add(あいてむ item) {
this.dic.Add(item.名前, item);
}
public int Count() {
return this.dic.Count;
}
}
次のように foreach が使えるようになります。
あいてむコレクション c = this.GetItemCollection();
foreach (あいてむ i in c) {
// ここで i オブジェクトに対する諸々の処理をする
}
改めて、前回の内容のわかりにくさに orz