先日、自作したクラスのオブジェクトを foreach で扱えるようにする必要が出てきました。
今までは、たまたま基本クラスが IEnumerator を実装してくれていたために、自分で IEnumerator や IEnumerable を使う必要性が無かったのです。
早速実装してみました。
public class サンプル : 基本クラス, IEnumerable
{
Dictionary dic = new Dictionary();
public IEnumerator GetEnumerator() {
return this.dic.GetEnumerator();
}
}
これで、foreach で使えるようになったと思ったのですが、foreach の部分でキャストできないとの例外エラーが発生します。
何度やってもダメ。どこを調べてもダメ。あちらこちらで関連する資料を読み漁りました。
どうしてもわからないので、諦めて、自分で index を管理して IEnumerator インターフェイスを実装する法に変更しました。
しかし、dic オブジェクトからインデックスを取得するための方法を探すのですが見つかりません。
ふむふむ、dic.Values で値だけのコレクションが取得できるそうです・・・
あれ?
Values コレクションすか?
Values.GetEnumerator();
・・・・ orz
public class サンプル : 基本クラス, IEnumerable
{
Dictionary dic = new Dictionary();
public IEnumerator GetEnumerator() {
return this.dic.Values.GetEnumerator();
}
}
こうすれば良かったんですね・・・そりゃそうですよね。
似たような躓きが、2月ごろあったような気がしますが・・・
的外れに調べまくったおかげで IEnumerable, IEnumerator については詳しくなれました orz