继承自Seq

时间:2012-04-10 21:24:44

标签: f#

我想创建自己的自定义集合类型。

我将我的收藏定义为:

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()

我该怎么做?

1 个答案:

答案 0 :(得分:12)

在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()