为'实现GetEnumerator;foreach&x27;在';这';C#
我有一个实现了索引器的类。 我希望能够在this上运行foreach循环,但它说我必须实现枚举器接口。这让我实现了两种方法:为'实现GetEnumerator;foreach&x27;在';这';C#,c#,arrays,ienumerable,enumerator,C#,Arrays,Ienumerable,Enumerator,我有一个实现了索引器的类。 我希望能够在this上运行foreach循环,但它说我必须实现枚举器接口。这让我实现了两种方法: #region IEnumerable implementation public IEnumerator<Type> GetEnumerator() { throw new NotImplementedException(); } #endregion #region IEnumerable im
#region IEnumerable implementation
public IEnumerator<Type> GetEnumerator() {
throw new NotImplementedException();
}
#endregion
#region IEnumerable implementation
IEnumerator IEnumerable.GetEnumerator() {
throw new NotImplementedException();
}
#endregion
#区域IEnumerable实现
公共IEnumerator GetEnumerator(){
抛出新的NotImplementedException();
}
#端区
#区域可数实现
IEnumerator IEnumerable.GetEnumerator(){
抛出新的NotImplementedException();
}
#端区
这条线对我没有帮助,我读过了。唯一的实现是返回数组的枚举数。下面是一个实现IEnumerable的非常简单的示例:
public class SomeEnumerable : IEnumerable<string>
{
private string[] values = new string[] { "foo", "bar" };
#region Enumerator
private IEnumerable<string> GetValues()
{
foreach(var s in values)
{
yield return s;
}
}
#endregion Enumerator
#region IEnumerable implementation
public IEnumerator<string> GetEnumerator() {
return GetValues().GetEnumerator();
}
#endregion
#region IEnumerable implementation
IEnumerator IEnumerable.GetEnumerator() {
return GetEnumerator();
}
#endregion
}
公共类SomeEnumerable:IEnumerable
{
私有字符串[]值=新字符串[]{“foo”,“bar”};
#区域枚举器
私有IEnumerable GetValues()
{
foreach(值中的var s)
{
收益率;
}
}
#端域枚举器
#区域可数实现
公共IEnumerator GetEnumerator(){
返回GetValues().GetEnumerator();
}
#端区
#区域可数实现
IEnumerator IEnumerable.GetEnumerator(){
返回GetEnumerator();
}
#端区
}
如果你正在做一些不寻常的事情,只要用你需要的任何东西替换GetValues()内部的逻辑就行了。为什么你不只是迭代这个内部数组,而不是
这个?因为它背后有一些逻辑。我应该只在特定情况下返回内部数组单元格的值。通常我应该返回一个保存在另一个字段中的值。它的可能副本对我没有帮助,因为那里没有具体的实现。它只是返回数组的枚举数。将您的实现放入公共IEnumerator GetEnumerator()
,然后让另一个只返回GetEnumerator()
不需要GetValues
方法。它的主体可以直接放在GetEnumerator
方法中,因为C#允许yield return
出现在返回IEnumerator
的方法(以及返回IEnumerable
的方法)中。