我想创建自己的自定义集合类型。
我将我的收藏定义为:
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()
我该怎么做?
答案 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()