C++/CLIでも同じことができますか?利回りのキーワードはないので、私の腸の反応はない、それは吸うが、あなたは何ができますか? C#で
yield return
コンパイラはIEnumerable<T>
とIEnumerator<T>
の実装を実装してあなたのために必要なコードを生成することができますただのショートカットです。 C++/CLIはこのサービスを提供していないので、手動で行う必要があります。各インタフェースを実装するクラスを2つ作成します(または、C#コンパイラのように1つのクラスで両方を実装しますが、すべてを繰り返し呼び出すことができます - キュー:ステートフル)。ここで
は小さな例だ - 私はIDEを持っていないし、私のC++/CLIは少し錆びているので、私はC#で、それをあげる:
class MyRange : IEnumerable<int> {
private class MyRangeIterator : IEnumerator<int> {
private int i = 0;
public int Current { get { return i; } }
object IEnumerator.Current { get { return Current; } }
public bool MoveNext() { return i++ != 10; }
public void Dispose() { }
void IEnumerator.Reset() { throw new NotImplementedException(); }
}
public IEnumerator<int> GetEnumerator() { return new MyRangeIterator(); }
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
}
// Usage:
foreach (int i in new MyRange())
Console.WriteLine(i);
これはどのように 'yield'作品ではありません。あなたは 'IEnumerable'としてリターンを指定する必要があります。 –
IllidanS4