0

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

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 つのクラスからジェネリックを使用するための推奨される変換は何ですか

4

2 に答える 2

1

列挙子から返される型を指定していません。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<T> が追加で IDisposable を実装しているため、CurvePointEnumerator と RTRatePointEnumerator に Dispose メソッドを追加する必要があることです。おそらく、このメソッドはほとんど空である可能性があります。理由は、以前に何も処分していなかった場合は、今は処分する必要がないからです。

void IDispose.Dispose() {
  // Nothing to see here
}
于 2008-12-01T03:03:46.483 に答える
0

IEnumerable<T> and IEnumerator<T>

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

于 2008-12-01T02:45:47.147 に答える