質問

iジェネリックの使用に移行しようとしているクラスがいくつかあります

Class1:カーブ

このクラスには次のコードがあります:

public class Curve : IEnumerable

  IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator(); // Calls non-interface method
    }

  public RTRatePointEnumerator GetEnumerator()
    {
        return new RTRatePointEnumerator(_hash);
    }

クラス2:

  public class CurvePointEnumerator : IEnumerator

ジェネリックを使用するためのこれら2つのクラスの推奨される変換は何ですか

役に立ちましたか?

解決

列挙子から返される型を指定しませんでした。しかし、RTRatePointとCurvePointという名前に基づいて推測します。コードを次のように変更します

class Curve: IEnumerable<RTRatePoint> {
  IEnumerator<RTRatePoint> IEnumerable<RTRatePoint>.GetEnumerator() { 
    return GetEnumerator();
  }
  public RTRatePointEnumerator GetEnumerator() {
    return new RTRatePointEnumerator(_hash);
  }
}

class CurvePointEnumerator : IEnumerator<CurvePoint>

あなたをつまずかせる可能性のあるアイテムの1つは、IEnumerator <!> lt; T <!> gt;です。さらに、IDisposableを実装するため、CurvePointEnumeratorとRTRatePointEnumeratorにDisposeメソッドを追加する必要があります。このメソッドはほとんど空になる可能性があります。以前に何も処分していなかったのであれば、今は必要ありません。

void IDispose.Dispose() {
  // Nothing to see here
}

他のヒント

IEnumerable<T> and IEnumerator<T>

ああ、それは私のコードを飲み込んだ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top