2009-05-15 15 views
9

Consideriamo la seguente enum in C#Conversione byte a un'istanza di un enum in F #

public enum ScrollMode : byte 
{ 
     None = 0, 
     Left = 1, 
     Right = 2, 
     Up = 3, 
     Down = 4 
} 

Il codice F # riceve un byte e deve restituire un'istanza della enum ho cercato

let mode = 1uy 
let x = (ScrollMode)mode 

(Ovviamente nell'applicazione reale non è possibile impostare la 'modalità', viene ricevuta come parte dei dati di rete).

L'esempio sopra non viene compilato, qualche suggerimento?

risposta

14

Per enumerazioni il cui sottostante è di tipo 'int', la funzione 'enum' farà la conversione, ma per le enumerazioni non-Int, è necessario 'LanguagePrimitives.EnumOfValue', a la:

// define an enumerated type with an sbyte implementation 
type EnumType = 
    | Zero = 0y 
    | Ten = 10y 

// examples to convert to and from 
let x = sbyte EnumType.Zero 
let y : EnumType = LanguagePrimitives.EnumOfValue 10y 

(EnumOfValue elencati qui

http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/FSharp.Core/Microsoft.FSharp.Core.LanguagePrimitives.html

(ora http://msdn.microsoft.com/en-us/library/ee340276(VS.100).aspx)

mentre enum elencati qui

http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/FSharp.Core/Microsoft.FSharp.Core.Operators.html

(ora http://msdn.microsoft.com/en-us/library/ee353754(VS.100).aspx) )

2

let x: = ScrollMode enum modalità