我想一个简单的问题,但找不到任何相关信息。 例如,在c#中,我可以使用继承定义值枚举类型:
public enum RequestedService : ushort
{
[Description("Unknown")]
Unknown = 0,
[Description("Status")]
SERVICE1 = 0x0001
}
但是我将如何在F#中做到这一点,到目前为止,我将其翻译为:
type RequestedService =
| [<Description("Unknown")>] Unknown = 0u
| [<Description("Status")>] SERVICE1 = 0x0001u
我尝试使用继承,并尝试在值之类的值之前定义类型
Unknown = uint16 0u
但是我遇到了编译错误,这有可能吗?
答案 0 :(得分:5)
在 Enumerations 中记录了将非int32
值投射到enum
的情况:
默认的
enum
函数适用于类型int32
。因此,它不能与具有其他基础类型的枚举类型一起使用。而是使用以下内容。type uColor = | Red = 0u | Green = 1u | Blue = 2u let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)
您将这样做:
open Microsoft.FSharp.Core.LanguagePrimitives
type RequestedService =
| [<Description("Unknown")>] Unknown = 0u
| [<Description("Status")>] SERVICE1 = 0x0001u
let service = EnumOfValue<uint32, RequestedService>(0u) // Or 1u or whatever
或者,如果您愿意:
let service : RequestedService = EnumOfValue 0u // Or 1u or whatever
有关更多信息,请参见: LanguagePrimitives.EnumOfValue<'T,'Enum> Function 。