在F#中将字节转换为枚举的实例

时间:2009-05-15 02:59:44

标签: f# enums

让我们在C#中考虑以下枚举

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

F#代码接收一个字节,并且必须返回枚举的实例 我试过了

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

(当然在实际应用中我没有设置'模式',  它是作为网络数据的一部分收到的。)

上面的例子没有编译,有什么建议吗?

2 个答案:

答案 0 :(得分:17)

对于底层类型为'int'的枚举,'enum'函数将执行转换,但对于非int枚举,您需要'LanguagePrimitives.EnumOfValue',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

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

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

而enum列在这里

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

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

答案 1 :(得分:2)

让x:ScrollMode =枚举模式