2009-05-15 10 views
9

Vamos a considerar la siguiente enumeración en C#conversión de bytes a una instancia de una enumeración en Fa #

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

El # código F recibe un byte y tiene que devolver una instancia de la enumeración He tratado

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

(Por supuesto que en la aplicación real no consigo configurar el "modo", se recibe como parte de los datos de la red).

El ejemplo anterior no recopila ninguna sugerencia?

Respuesta

14

Para enumeraciones cuyo subyacente es de tipo 'int', la función 'enumeración' va a hacer la conversión, pero para las enumeraciones no int, es necesario 'LanguagePrimitives.EnumOfValue', al estilo de:

// 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á aquí

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

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

mientras que la enumeración está aquí

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

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

2

Sea X: = ScrollMode enum modo

Cuestiones relacionadas