2009-08-13 176 views
0

我想基于字符串中的值动态设置一个枚举到目前为止这么好,我不知道我一直在做错什么。我有以下代码:为什么我的enum.Parse方法失败?

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

该错误将有所帮助。 – jcollum 2009-08-13 17:08:18

+0

对不起,我不知道包装代码的捷径。 – 2009-08-13 17:09:02

+0

返回的错误是:未找到请求的值'0x0000000000000000000010107A8D' – 2009-08-13 17:09:33

回答

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

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

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

EDIT2:马克的建议更改后,从Convert.ToInt32Convert.ToInt64

+0

Muchas gracias padre – 2009-08-13 17:18:56

+1

您可能想ToInt64,考虑枚举是Int64类型(长) – Marc 2009-08-13 17:23:38

+0

谢谢马克。 +1为您的建议。 – shahkalpesh 2009-08-13 17:28:13

0

你解析的字符串在哪里?你不是想把一个像TurnLeft这样的字符串变成TagLabels.TurnLeft吗?

MSDN

+0

我想使用标记字符串来设置ID变量 – 2009-08-13 17:11:05

1

SomeID是一个字符串,您的枚举是一个漫长的。

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

4

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

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