1

.next()私は C# コレクションを持っていますが、Python のメソッドを使用して可能なものと同様に、次の生成された値にアクセスできるかどうか疑問に思っていました。例えば

 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

Python はわかりませんが、C# には存在します。

IEnumerable を実装するすべてのオブジェクトがこの機能をサポートします。

利回り演算子を見てください http://msdn.microsoft.com/en-us/library/9k7k7cf0(v=vs.80).aspx

于 2013-03-29T13:21:52.420 に答える
0

IEnumerator インターフェイスは、GetNext() というメソッドを提供します。コレクションから次のアイテムを入手できます。IEnumerator の汎用バージョンもあります: IEnumerator、こちらを参照してください。

参考までにこちらをご覧ください。

于 2013-03-29T13:19:23.667 に答える
0

IEnumerableIEnumerable<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 に答える