1

我有一个 C# 集合,我想知道是否可以访问下一个生成的值,类似于使用 Python 的.next()方法可以访问的值。例如

 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循环是不合适的,因为每次“迭代”都使用不同的类方法。如果/当订单需要在代码中更改时,我想这样做以节省必须保持更新的索引。

4

7 回答 7

2

不要忽视低技术的解决方案:

int index = 0;
double diffFoo = myList[index++] - myObject.Foo;
double diffBar = myList[index++] - myObject.Bar;
于 2013-03-29T13:32:28.627 回答
2

您可以使用IEnumerator.MoveNext方法。

var enumerator = myList.GetEnumerator();

enumerator.MoveNext();
double diffFoo = enumerator.Current - myObject.Foo;

enumerator.MoveNext();
double diffBar =enumerator.Current - myObject.Bar;
于 2013-03-29T13:33:48.677 回答
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);
于 2013-03-29T13:22:19.660 回答
0

IEnumerator 接口提供了一个名为 GetNext() 的方法。您可以从集合中获取下一个项目。还有 IEnumerator 的通用版本:IEnumerator,请参见此处

请参阅此处以供参考。

于 2013-03-29T13:19:23.667 回答
0

您应该阅读有关IEnumerable,IEnumerable<T>IEnumerator接口的信息。它们被foreach循环使用。

您可以调用GetEnumerator集合来获取枚举器实例。有了它,您可以使用MoveNext()方法和Current属性。

于 2013-03-29T13:19:42.137 回答
0

像这样的东西可以工作

var someEnumerator = getInt().GetEnumerator();
while(someEnumerator.MoveNext())
{
    int intEnumerate = someEnumerator.Current;
    Console.WriteLine(intEnumerate);
}
于 2013-03-29T13:21:31.520 回答
0

我不知道 Python,但它现在存在于 c# 中!

任何实现 IEnumerable 的对象都支持此功能。

看看产量运算符http://msdn.microsoft.com/en-us/library/9k7k7cf0(v=vs.80).aspx

于 2013-03-29T13:21:52.420 回答