我正在尝试根据字符串中的值动态设置枚举到目前为止这么好,我不知道我做错了什么。我有以下代码:
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
我看不出我正在做的事情有什么问题。
答案 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?