2010-09-10 49 views

回答

3

跳轉想到的第一件事是包裝的System.Enum成員與強類型的包裝:

// gets all underlying values for which an enum is defined 
let definedVals<'a, 'b when 'a : enum<'b>> = 
    System.Enum.GetValues(typeof<'a>) 
    |> Seq.cast<'a> 
    |> Seq.map (LanguagePrimitives.EnumToValue) 

let ints = definedVals<System.ConsoleColor,_> 
+0

不得不思考這一個了一段時間,但現在明白了,這是一個很好的例子。謝謝。 我困惑了一陣子的是System.Enum.GetValues()似乎並不需要約束,但LanguagePrimitives.EnumToValue會。我想這是事實,前者是在一般使用.NET庫,不知道F#約束。另一方面,類型約束並不是F#所特有的(C#泛型有它們),所以我認爲應該有一種方法讓它們工作在跨語言環境中。 無論如何,就我原來的問題而言,它已被回答。 – 2010-09-12 12:52:35