我有一个C#Collection,我想知道是否有可能访问下一个产生的值,类似于使用Python的.next()
方法。 e.g。
double diffFoo = myList.next() - myObject.Foo;
double diffBar = myList.next() - myObject.Bar;
...
而不是,
double diffFoo = myList[0] - myObject.Foo;
double diffBar = myList[1] - myObject.Bar;
...
在这种情况下,foreach
循环不合适,因为在每个'迭代'上使用了不同的类方法。我想这样做是为了在代码需要在代码中更改时保存更新索引。
答案 0 :(得分:2)
不要忽视低技术解决方案:
int index = 0;
double diffFoo = myList[index++] - myObject.Foo;
double diffBar = myList[index++] - myObject.Bar;
答案 1 :(得分:2)
您可以使用IEnumerator.MoveNext方法。
var enumerator = myList.GetEnumerator();
enumerator.MoveNext();
double diffFoo = enumerator.Current - myObject.Foo;
enumerator.MoveNext();
double diffBar =enumerator.Current - myObject.Bar;
答案 2 :(得分:1)
如果您愿意,可以使用列表中的枚举器:
var s = new List<string>() { "A", "B", "C" };
var enumerator = s.GetEnumerator();
enumerator.MoveNext();
Debug.WriteLine(enumerator.Current);
enumerator.MoveNext();
Debug.WriteLine(enumerator.Current);
答案 3 :(得分:0)
IEnumerator接口提供了一个名为GetNext()的方法。您可以从集合中获取下一个项目。还有IEnumerator的通用版本:IEnumerator,请参阅here。
请参阅here以供参考。
答案 4 :(得分:0)
您应该阅读有关IEnumerable
,IEnumerable<T>
和IEnumerator
接口的信息。它们由foreach
循环使用。
您可以在集合上调用GetEnumerator
来获取枚举器实例。有了它,您可以使用MoveNext()
方法和Current
属性。
答案 5 :(得分:0)
这样的事情可以起作用
var someEnumerator = getInt().GetEnumerator();
while(someEnumerator.MoveNext())
{
int intEnumerate = someEnumerator.Current;
Console.WriteLine(intEnumerate);
}
答案 6 :(得分:0)
我不知道Python,但它现在存在于c#中!
任何实现IEnumerable的对象都支持此功能。
看看yield运算符http://msdn.microsoft.com/en-us/library/9k7k7cf0(v=vs.80).aspx