为什么我的enum.Parse方法失败了?

时间:2009-08-13 17:02:16

标签: c# .net

我正在尝试根据字符串中的值动态设置枚举到目前为止这么好,我不知道我做错了什么。我有以下代码:

public enum TagLabels : long
    {
        TurnLeft = 0x0000000000000000000030A38DB1,
        TurnRight = 0x00000000000000000000307346CC,
        LiftApproach = 0x0000000000000000000012107A8D
    } 

TagLabels ID;

string someID = "0x0000000000000000000012107A8D"; 
IDs = (TagLabels)Enum.Parse(typeof(TagLabels), someID ); //<== I get runtime error on this line

我看不出我正在做的事情有什么问题。

4 个答案:

答案 0 :(得分:4)

Enum.Parse旨在将符号名称的字符串表示形式转换为枚举值,如Enum.Parse("TurnLeft")中所示。如果您拥有的是一个给出数值的字符串,那么您应该将字符串解析为相应的整数类型并将其转换为Enum val。

IDs = (TagLabels)long.Parse("0x0000000000000000000012107A8D");

答案 1 :(得分:2)

IDs = (TagLabels)Convert.ToInt64(someID, 16);

编辑:你有一个十六进制格式的字符串而不是直接数字。因此,它需要先转换为int。

如果Enum值存在,则可以将int值转换为枚举类型。

EDIT2:在Marc的建议从Convert.ToInt32转移到Convert.ToInt64之后发生了变化

答案 2 :(得分:1)

SomeID是一个字符串,你的枚举很长。

尝试使用TurnLeft而不是“0x0000000000000000000012107A8D”

答案 3 :(得分:0)

您要解析的字符串在哪里?你是不是想把像“TurnLeft”这样的字符串变成TagLabels.TurnLeft?

MSDN