从一个没有实现Enumerator的类我现在可以创建一个(thks Daniel)
type Bloomberglp.Blpapi.Element with
member this.GetEnumerator() =
(seq { for i in 0 .. this.NumElements - 1 -> this.GetElement(i) }).GetEnumerator()
我希望从中创建一个IEnumerable包装器
以下有效,但有更好的方法吗?
(例如,不的方法必须指定IEnumerable接口,其实现可以从IEnumerable派生)
member this.ToEnumerableElements():IEnumerable<Element> = {
new IEnumerable<Element> with
member anon.GetEnumerator() :IEnumerator<Element> = this.GetEnumerator()
member anon.GetEnumerator() :IEnumerator = this.GetEnumerator() :> IEnumerator
}
答案 0 :(得分:2)
如果您想要ToEnumerable
方法,则也不应创建GetEnumerator
方法。通常,直接调用GetEnumerator
无论如何都是代码味道。
type Bloomberglp.Blpapi.Element with
member this.ToEnumerable() = Seq.init this.NumElements this.GetElement
使用此方法,您可以使用Seq
模块进行大多数操作,而不必直接调用GetEnumerator
。
例如:
elmt.ToEnumerable() |> Seq.iter (printfn "%O")