gpt4 book ai didi

c# - 枚举器重载失败

转载 作者:行者123 更新时间:2023-11-30 13:58:08 26 4
gpt4 key购买 nike

我想实现一个 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;
}
}

错误是:

Error 5 The type 'CPS.Manipulation.WatchableDictionary.WachableDictionaryEnumerator' already contains a definition for 'Current' D:\CE\Supins\Cyan Pembuat Soal\Required Manipulation\Class1.cs 32 25 Required Manipulation

但是如果我删除其中一个 Current 对象,那么错误是

Error 21 'CPS.Manipulation.WatchableDictionary.WachableDictionaryEnumerator' does not implement interface member 'System.Collections.Generic.IEnumerator.Current'. 'CPS.Manipulation.WatchableDictionary.WachableDictionaryEnumerator.Current' cannot implement 'System.Collections.Generic.IEnumerator.Current' because it does not have the matching return type of 'TVal'. D:\CE\Supins\Cyan Pembuat Soal\Required Manipulation\Class1.cs 16 22 Required Manipulation

帮我修改代码。

最佳答案

您需要使用 explicit interface implementation IEnumerator.Current 之一或 IEnumerator<T>.Current .通常,您显式实现非通用接口(interface)(在您需要的地方),并将该实现委托(delegate)给通用接口(interface):

// Explicit interface implementation
object IEnumerator.Current { get { return Current; } }

// Normal implementation
public TVal Current { get { return a[len]; } }

请注意,为了正确获取第一个 元素,您应该初始化len。到 -1 开始(和 Reset )......理想情况下验证 lenCurrent属性(property)。

请注意,在执行 IEnumerable<T> 时你需要做同样的事情,例如

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

IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}

关于c# - 枚举器重载失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18169862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com