IDictionaryEnumerator不是一个迭代器接口类型?
  我试图将一些使用Hashtable代码移植到没有这个类的环境中。  所以我想过不要搞乱代码,只需从Dictionary创建我自己的Hashtable ,就像这样: 
public class Hashtable : Dictionary<Object, Object> {
    // ...
    new public IDictionaryEnumerator GetEnumerator() {          
      var ie = base.GetEnumerator();
      while (ie.MoveNext())
          yield return new DictionaryEntry(ie.Current.Key, ie.Current.Value);
    }
}
我收到这个错误:
错误CS1624:'System.Collections.Hashtable.GetEnumerator()'的主体不能是迭代器块,因为'System.Collections.IDictionaryEnumerator'不是迭代器接口类型
  那么,但IDictionaryEnumerator从IEnumerator继承。 
  奇怪的是,如果我只是返回(IDictionaryEnumerator)base.GetEnumerator();  代码编译(但在运行时在foreach循环中失败)。 
我不明白这个错误告诉我什么,不知道如何正确实现这一点。
  迭代器块被编译器重写为实现IEnumerable或IEnumerator ;  编译器不知道如何生成实现IDictionaryEnumerator的类,因此您不能使用迭代器块来实现该接口。 
  可能的解决方法是提供您自己的IDictionaryEnumerator实现: 
class Hashtable : Dictionary<object, object>
{
    new public IDictionaryEnumerator GetEnumerator()
    {
        return new DictionaryEnumerator(base.GetEnumerator());
    }
    struct DictionaryEnumerator : IDictionaryEnumerator
    {
        private Enumerator _en;
        public DictionaryEnumerator(Dictionary<object, object>.Enumerator en)
        {
            _en = en;
        }
        public object Current
        {
            get
            {
                return Entry;
            }
        }
        public DictionaryEntry Entry
        {
            get
            {
                var kvp = _en.Current;
                return new DictionaryEntry(kvp.Key, kvp.Value);
            }
        }
        public bool MoveNext()
        {
            bool result = _en.MoveNext();
            return result;
        }
        public void Reset()
        {
            throw new NotSupportedException();
        }
        public object Key
        {
            get
            {
                var kvp = _en.Current;
                return kvp.Key;
            }
        }
        public object Value
        {
            get
            {
                var kvp = _en.Current;
                return kvp.Value;
            }
        }
    }
}
上一篇: IDictionaryEnumerator is not an iterator interface type?
