c# - 如何确定枚举值的表示类型?

标签 c# enums casting

考虑以下两个枚举:

enum MyEnum1 {
    Value1 = 1,
    Value2 = 2,
    Value3 = 3
}

enum MyEnum2 {
     Value1 = 'a',
     Value2 = 'b',
     Value3 = 'c'
}

我可以通过显式转换检索这些枚举值表示的物理值,((int)MyEnum1.Value2) == 2((char)MyEnum2.Value2) == 'b',但是如果我想在不知道要转换为的类型的情况下获取 char 表示或 int 表示怎么办?

是否可以在不强制转换的情况下获取枚举的基础值,或者至少可以通过编程确定基础值的正确类型?

最佳答案

这两个枚举的基础值都是 int。在第二种情况下,您只是利用了从 charint 的隐式转换这一事实。

例如,如果您查看 Reflector 中的第二个枚举,您会看到如下内容:

internal enum MyEnum2
{
    Value1 = 0x61,
    Value2 = 0x62,
    Value3 = 0x63
}

编辑:如果你想要不同的底层类型,你必须指定它,例如

public enum Foo : long
{
}

不过,只有bytesbyteshortushortintuintlongulong 是有效的底层枚举类型。

关于c# - 如何确定枚举值的表示类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3760933/

相关文章:

javascript - 如何将id添加到jquery数据表中列过滤器的类型选择元素

c# - 检查字符串是否以列表中的任何字符开头

java - 提交表单时 Spring 枚举异常

java - JSON 模式到 POJO - 枚举作为一个单独的 java 文件

java - 将变量声明为 Enum<EnumType> 和 EnumType 之间的区别

应用按位运算符 "int"后从 "unsigned short"转换为 "~"

c# - 用于验证 oracle 编号的有效正则表达式

c# - C#中使用Open Xml SDK导出DataTable到Excel时指定编码格式

c# - 从十进制转换为 float

c++ - 在 C++ 中转换时对象切片