2012-02-24 94 views
1

从类没有实现枚举我现在可以创建一个(THKS丹尼尔)使用匿名类

type Bloomberglp.Blpapi.Element with 
    member this.GetEnumerator() = 
     (seq { for i in 0 .. this.NumElements - 1 -> this.GetElement(i) }).GetEnumerator() 

我期待从它创建

一个IEnumerable包装在fsharp从统计员创造了IEnumerable下面的工程,但有没有更好的办法

(例如,一个办法必须指定IEnumerable接口,其实现可以自IEnumerable派生)如果你想有一个ToEnumerable方法,你不应该太创建GetEnumerator方法

member this.ToEnumerableElements():IEnumerable<Element> = { 
    new IEnumerable<Element> with 
     member anon.GetEnumerator() :IEnumerator<Element> = this.GetEnumerator() 
     member anon.GetEnumerator() :IEnumerator = this.GetEnumerator() :> IEnumerator 
} 

回答

2

。一般来说,直接拨打GetEnumerator无论如何都是一种代码味道。

type Bloomberglp.Blpapi.Element with 
    member this.ToEnumerable() = Seq.init this.NumElements this.GetElement 

有了这个方法,你可以使用大部分操作Seq模块和永远也不应该直接调用GetEnumerator

例如:

elmt.ToEnumerable() |> Seq.iter (printfn "%O") 
+0

美丽。我必须更好地探索核心课程。 (实际上,我猜一个*总是*从阅读中学习,即使在我们认为我们知道他们的熟练程度时也是如此 - 我还没有) – nicolas 2012-02-24 16:09:24