2009-05-15 7 views
9

Considérons l'ENUM suivante en C#Conversion octet à une instance d'un ENUM en F #

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

Le code F # reçoit un octet et doit retourner une instance de l'ENUM J'ai essayé

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

(Bien sûr, dans l'application réelle, je ne parviens pas à définir le 'mode', il est reçu comme partie des données réseau).

L'exemple ci-dessus ne compile pas, des suggestions?

Répondre

14

Pour énumérations dont le type sous-jacent est 'int', la fonction 'enum' fera la conversion, mais pour les énumérations non-int, vous avez besoin '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 est répertorié ici

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

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

alors ENUM est répertorié ici

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

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

2

let x: scrollmode = mode ENUM

Questions connexes