首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将枚举转换为基础类型

将枚举转换为基础类型
EN

Stack Overflow用户
提问于 2012-01-31 07:49:13
回答 2查看 1.9K关注 0票数 12

我有一个枚举,如下

代码语言:javascript
运行
复制
type Suit =
    |Clubs = 'C'
    |Spades = 'S'
    |Hearts = 'H'
    |Diamonds = 'D'

如果给定枚举值,如何获取底层字符值?例如,我有Suit.Clubs,并想得到'C‘

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-31 08:13:23

作为另一种选择

代码语言:javascript
运行
复制
type Suit =
    |Clubs = 'C'
    |Spades = 'S'
    |Hearts = 'H'
    |Diamonds = 'D'

let c = Suit.Clubs
let v : char = LanguagePrimitives.EnumToValue c

编辑:不同方法的比较:

代码语言:javascript
运行
复制
type Suit =
    |Clubs = 'C'
    |Spades = 'S'
    |Hearts = 'H'
    |Diamonds = 'D'

let valueOf1 (e : Suit) = LanguagePrimitives.EnumToValue e
let valueOf2 (e : Suit) = unbox<char> e
let valueOf3 (e : Suit) = (box e) :?> char

在引擎盖下:

代码语言:javascript
运行
复制
.method public static 
    char valueOf1 (
        valuetype Program/Suit e
    ) cil managed 
{
    // Method begins at RVA 0x2050
    // Code size 3 (0x3)
    .maxstack 8

    IL_0000: nop
    IL_0001: ldarg.0
    IL_0002: ret
} // end of method Program::valueOf1


.method public static 
    char valueOf2 (
        valuetype Program/Suit e
    ) cil managed 
{
    // Method begins at RVA 0x2054
    // Code size 13 (0xd)
    .maxstack 8

    IL_0000: nop
    IL_0001: ldarg.0
    IL_0002: box Program/Suit
    IL_0007: unbox.any [mscorlib]System.Char
    IL_000c: ret
} // end of method Program::valueOf2

.method public static 
    char valueOf3 (
        valuetype Program/Suit e
    ) cil managed 
{
    // Method begins at RVA 0x2064
    // Code size 13 (0xd)
    .maxstack 8

    IL_0000: nop
    IL_0001: ldarg.0
    IL_0002: box Program/Suit
    IL_0007: unbox.any [mscorlib]System.Char
    IL_000c: ret
} // end of method Program::valueOf3
票数 22
EN

Stack Overflow用户

发布于 2012-01-31 07:59:53

您可以使用LanguagePrimitives模块中的函数:

代码语言:javascript
运行
复制
// Convert enum value to the underlying char value
let ch = LanguagePrimitives.EnumToValue Suit.Clubs

// Convert the char value back to enum
let suit = LanguagePrimitives.EnumOfValue ch

编辑:我在第一次回答时没有看到这些函数,所以我首先建议使用:

代码语言:javascript
运行
复制
unbox<char> Suit.Clubs

这比ildjarn在评论中建议的要短,但它有同样的问题-没有检查你是否真的转换成了正确的类型。对于EnumToValue,您不能犯这个错误,因为它总是返回正确的基础类型的值。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9072500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档