2009-08-13 174 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");