C# 枚举器无法返回第一个元素
我在类中实现了C# 枚举器无法返回第一个元素,c#,enumerator,C#,Enumerator,我在类中实现了IEnumerator接口。它工作得很好,只是它从不返回MyListContainer中的第一个元素。只有剩下的。因此,为了解决这个问题,我使用了以下方法: public void Reset(){ EnumeratorPosition = -1; } 但它没有再次返回第一个结果 有没有关于如何解决这个问题的建议?或者第一个元素是foreach的份额 public bool MoveNext() { EnumeratorPosition++
IEnumerator
接口。它工作得很好,只是它从不返回MyListContainer
中的第一个元素。只有剩下的。因此,为了解决这个问题,我使用了以下方法:
public void Reset(){ EnumeratorPosition = -1; }
但它没有再次返回第一个结果
有没有关于如何解决这个问题的建议?或者第一个元素是foreach的份额
public bool MoveNext()
{
EnumeratorPosition++;
return (EnumeratorPosition < MyListContainer.Count);
}
public void Reset()
{ EnumeratorPosition = 0; }
public object Current
{
get { return MyListContainer[EnumeratorPosition]; }
}
public IEnumerator GetEnumerator()
{
return (IEnumerator)this;
}
public bool MoveNext()
{
枚举位置++;
返回(EnumeratorPosition
StartEnumeratorPosition
at-1,而不是0。然后,对MoveNext()
的第一个调用将移动到第一项,而不是第二项
一个尚未开始枚举的枚举数没有指向任何东西——指向第一个元素之前的空白处
在实现方面,这很简单。在声明中将其初始化为-1
,并在Reset()中将其设置为-1
:
private int\u枚举位置=-1;
public void Reset(){u enumeratorPosition=-1;}
公共图书馆
{
_枚举位置++;
返回(_enumeratorPosition
…当您使用它时,由于它是(或应该是)一个私有字段,让我们将其重命名为\u enumeratorPosition
,以便任何阅读您的代码的人都会立即知道它是什么
综上所述,您可以调用MyListContainer.GetEnumerator()
,而不是编写自己的。对于我们大多数人来说,除了作为练习之外,很少实现IEnumerator
。但这是一个很好的锻炼,所以我不想让你泄气 StartEnumeratorPosition
at-1,而不是0。然后,对MoveNext()
的第一个调用将移动到第一项,而不是第二项
一个尚未开始枚举的枚举数没有指向任何东西——指向第一个元素之前的空白处
在实现方面,这很简单。在声明中将其初始化为-1
,并在Reset()中将其设置为-1
:
private int\u枚举位置=-1;
public void Reset(){u enumeratorPosition=-1;}
公共图书馆
{
_枚举位置++;
返回(_enumeratorPosition
…当您使用它时,由于它是(或应该是)一个私有字段,让我们将其重命名为\u enumeratorPosition
,以便任何阅读您的代码的人都会立即知道它是什么
综上所述,您可以调用MyListContainer.GetEnumerator()
,而不是编写自己的。对于我们大多数人来说,除了作为练习之外,很少实现IEnumerator
。但这是一个很好的锻炼,所以我不想让你泄气 除@Ed的答案外,您还可以将post increment移到return语句中:
return (EnumeratorPosition++ < MyListContainer.Count);
return(EnumeratorPosition++
除了@Ed的答案,您还可以将post增量移到return语句中:
return (EnumeratorPosition++ < MyListContainer.Count);
return(EnumeratorPosition++
的确如此。从概念上讲,枚举数在序列开始之前启动一个。@Broadroad如何初始化枚举位置?您没有显示它。@Broadroad在构造函数或字段定义中初始化枚举位置
,以及重置
。(只需遵循MSDN示例)这听起来很有希望。你是怎么做到的?我是说,把这只饥饿的小野兽丑化?真的。从概念上讲,枚举数在序列开始之前启动一个。@Broadroad如何初始化枚举位置?您没有显示它。@Broadroad在构造函数或字段定义中初始化枚举位置
,以及重置
。(只需遵循MSDN示例)这听起来很有希望。你是怎么做到的?我的意思是,把这个饥饿的小野兽形象化?与其自己编写枚举器,为什么不使用为你编写代码的枚举器呢。或者,MyListContainer可能已经实现了IEnumerable。与其编写自己的枚举器,不如使用为您编写代码的枚举器。或者,MyListContainer可能已经实现了IEnumerable。