2009-05-15 6 views
9

Lassen Sie uns die folgende Enum in C# betrachtenKonvertieren von Byte zu einer Instanz eines ENUM in F #

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

Der F # Code ein Byte empfängt und hat eine Instanz des Enum zurückzukehren ich

let mode = 1uy 
let x = (ScrollMode)mode 
versucht haben,

(Natürlich in der realen Anwendung bekomme ich nicht zu 'Modus', wird es als Teil der Netzwerkdaten erhalten).

Das obige Beispiel kompiliert keine Vorschläge?

Antwort

14

Für Aufzählungen, deren zugrunde liegenden Typ 'int', die 'Enum' -Funktion wird die Konvertierung tun, sondern auch für Nicht-int Aufzählungen, die Sie brauchen '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 aufgeführt hier

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

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

während Enumeration aufgeführt ist hier

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

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

2

let x: ScrollMode = Enum-Modus