使用匿名类从fsharp中的枚举器创建IEnumerable

时间:2012-02-24 15:46:31

标签: f# ienumerable sequence

从一个没有实现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
 }

1 个答案:

答案 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")