我想实现一个IEnumerator.但它会导致错误
public class WachableDictionaryEnumerator : IEnumerator<TVal>
{
private TVal[] a;
private int len;
public bool MoveNext()
{
len = len + 1;
return len < a.Length;
}
public object Current
{
get
{
return a[len];
}
}
public TVal Current
{
get
{
return a[len];
}
}
public void Dispose()
{
a = null;
len = 0;
}
public void Reset()
{
len = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
错误是:
错误5类型'CPS.Manipulation.WatchableDictionary.WachableDictionaryEnumerator'已包含'当前'的定义D:\ CE\Supins\Cyan Pembuat Soal\Required Manipulation\Class1.cs 32 25所需的操作
但是如果我删除了一个Current对象,那么错误就是
错误21'CPS.Manipulation.WatchableDictionary.WachableDictionaryEnumerator'未实现接口成员'System.Collections.Generic.IEnumerator.Current'.'CPS.Manipulation.WatchableDictionary.WachableDictionaryEnumerator.Current'无法实现'System.Collections.Generic.IEnumerator.Current',因为它没有匹配的返回类型'TVal'.D:\ CE\Supins\Cyan Pembuat Soal\Required Manipulation\Class1.cs 16 22所需操作
帮我修复代码.
您需要为其中一个或使用显式接口实现.通常,您明确地实现非通用接口(在您需要的地方),并将该实现委托给通用接口:IEnumerator.CurrentIEnumerator<T>.Current
// Explicit interface implementation
object IEnumerator.Current { get { return Current; } }
// Normal implementation
public TVal Current { get { return a[len]; } }
Run Code Online (Sandbox Code Playgroud)
请注意,为了正确获取第一个元素,您应该初始化len为-1以开始(和开启Reset)...并且理想地len在Current属性中进行验证.
请注意,在实施时IEnumerable<T>您需要做同样的事情,例如
public IEnumerator<string> GetEnumerator()
{
// Whatever
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)