2012-02-24 55 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