首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c#中将字符和整数值转换为枚举?

如何在c#中将字符和整数值转换为枚举?
EN

Stack Overflow用户
提问于 2021-06-16 19:18:57
回答 2查看 57关注 0票数 2

我已经定义了一个枚举为blow,它包括int类型和character类型。

我试着把字符串解析成枚举,但在输入字符时出错。

如何解决这个问题?

代码语言:javascript
复制
//parse successfully.
MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), "1"); 

//error:Requested value 'A' was not found.
MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), "A"); 

 public enum MyEnum
    {
        [Description("Des1")]
        Status1 = 1,
        [Description("Des2")]
        Status2 = 2,
        [Description("Des3")]
        Status3 = 3,
        [Description("Des4")]
        Status4 = 4,
        [Description("Des7")]
        Status5 = 5,
        [Description("Des6")]
        Status6 = 6,
        [Description("Des7")]
        Status7 = 7,
        [Description("Des8")]
        Status8 = 8,
        [Description("Des9")]
        Status9 = 9,
        [Description("DesA")]
        StatusA = 'A',
        [Description("DesB")]
        StatusB = 'B',
        [Description("DesC")]
        StatusC = 'C',
    }

更新:

好的,我想我需要检查输入的是数字还是不是做不同的处理。下面的代码确实起作用了,感谢大家的建议。

代码语言:javascript
复制
    string inputParam = "A";
    int useLess;
    MyEnum myEnum;
    var isDigit = int.TryParse(inputParam, out useLess);
    if (isDigit) {
        myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), inputParam);
    }
    else
    {
        myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), ((int)Convert.ToChar(inputParam)).ToString());
    }
EN

回答 2

Stack Overflow用户

发布于 2021-06-16 19:25:50

这里的问题是枚举实际上是基于Char值的,所以int值被转换为int

换句话说,这就是:

代码语言:javascript
复制
StatusA = 'A',

实际上转换为:

代码语言:javascript
复制
StatusA = 65,

因为StatusA的实际数值是65,所以您必须这样做:

代码语言:javascript
复制
MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), "65");

或者,为了更明显地说明65'A'

代码语言:javascript
复制
MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), ((int)'A').ToString());

请注意,enum.Parse()将解析枚举成员的名称或包含枚举成员数值的字符串,因此"65“或"StatusA”都可以工作。

因此,以下所有行都将返回相同的结果:

代码语言:javascript
复制
MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), "65");
MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), ((int)'A').ToString());
MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), "StatusA");
票数 3
EN

Stack Overflow用户

发布于 2021-06-16 19:27:56

Enum.Parse仅适用于关联常量值的名称或数值。枚举成员的。'A'不是这两个。如果您已经将字符串"65"传递给该方法,那么它就可以工作了。

请注意,如何编写关联的常量值并不重要--无论是'A'650b1000001还是0x41,对于编译器来说,它们看起来都是一样的。Enum.Parse只接受第二种编写方式。

要将字符'A'转换为枚举类型MyEnum,只需进行强制转换:

代码语言:javascript
复制
MyEnum foo = (MyEnum)'A';

但是,因为这里有一个字符串"A",所以需要获取第一个字符(假设您确定该字符串表示一个相关的常量值):

代码语言:javascript
复制
MyEnum foo = (MyEnum)"A"[0];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68001655

复制
相关文章

相似问题

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