- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现一个 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
)......理想情况下验证 len
在Current
属性(property)。
请注意,在执行 IEnumerable<T>
时你需要做同样的事情,例如
public IEnumerator<string> GetEnumerator()
{
// Whatever
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
关于c# - 枚举器重载失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18169862/
我是一名优秀的程序员,十分优秀!