枚举失败重载

Chr*_*ana 3 c#

我想实现一个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所需操作

帮我修复代码.

Jon*_*eet 8

您需要为其中一个或使用显式接口实现.通常,您明确地实现非通用接口(在您需要的地方),并将该实现委托给通用接口: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)...并且理想地lenCurrent属性中进行验证.

请注意,在实施时IEnumerable<T>您需要做同样的事情,例如

public IEnumerator<string> GetEnumerator()
{
    // Whatever
}

IEnumerator IEnumerable.GetEnumerator()
{
    return GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)