如何在c#中将字符和int值转换为枚举

  • 本文关键字:int 转换 枚举 字符 c# enums
  • 更新时间 :
  • 英文 :


我已经将Enum定义为blow,它包括int类型和字符类型。

我试图将字符串解析为枚举,但它会输入字符时发生错误。

如何解决此问题?

//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',
}

更新:

好的,我想我需要检查输入是数字还是不做不同的过程。代码如下,谢谢大家的建议。

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());
}

这里的问题是枚举实际上是基于int值的,因此char值被转换为int

换句话说,这个:

StatusA = 'A',

实际转换为:

StatusA = 65,

因为StatusA的实际数值是65,所以您必须执行以下操作:

MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), "65");

或者使65'A':更加明显

MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), ((int)'A').ToString());

注意,enum.Parse()将解析枚举成员的名称,或者解析包含枚举成员的数值的字符串,因此;65〃;或";状态A";会起作用。

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

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");

Enum.Parse仅适用于相关常数值的名称数值。枚举成员的。CCD_ 9两者都不是。如果您已经将字符串"65"传递给该方法,它就会起作用。

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

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

MyEnum foo = (MyEnum)'A';

但是,由于这里有一个字符串"A",您需要获得第一个字符(假设您确信该字符串代表一个相关的常数值(:

MyEnum foo = (MyEnum)"A"[0];

最新更新