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;
}
}
}
}
链接地址: http://www.djcxy.com/p/53791.html
上一篇: IDictionaryEnumerator is not an iterator interface type?