6

独自のカスタム コレクション タイプを作成したいと考えています。

私は自分のコレクションを次のように定義しています。

type A(collection : seq<string>) =
   member this.Collection with get() = collection

   interface seq<string> with
      member this.GetEnumerator() = this.Collection.GetEnumerator()

しかし、これはコンパイルされませんNo implementation was given for 'Collections.IEnumerable.GetEnumerator()

どうすればいいですか?

4

1 に答える 1

13

F#seqでは、実際には単なるエイリアスですSystem.Collections.Generic.IEnumerable<T>IEnumerable<T>ジェネリックは非ジェネリックも実装するためIEnumerable、F# 型も同様に実装する必要があります。

最も簡単な方法は、非ジェネリックなものをジェネリックなものに呼び出すことです

type A(collection : seq<string>) =
  member this.Collection with get() = collection

  interface System.Collections.Generic.IEnumerable<string> with
    member this.GetEnumerator() =
      this.Collection.GetEnumerator()

  interface System.Collections.IEnumerable with
    member this.GetEnumerator() =
      upcast this.Collection.GetEnumerator()
于 2012-04-10T21:32:26.207 に答える