IEnumeratorからジェネリック。
-
11-07-2019 - |
質問
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>
ああ、それは私のコードを飲み込んだ
所属していません StackOverflow