2009-08-13 9 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

+0

申し訳ありませんがコードを挿入するためのショートカットがわかりません。 –

+0

返されるエラーは次のとおりです。要求された値 '0x0000000000000000000012107A8D'が見つかりませんでした。 –

答えて

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

EDITのTurnLeftを使用してみてください:あなたは16進形式の文字列ではなく、直接番号を持っています。したがって、最初にintに変換する必要があります。

Enum値が存在する場合、int値をEnum型にキャストできます。

EDIT2:Convert.ToInt32からConvert.ToInt64

+0

Muchasのグラシアスのパドレを設定するには、タグ文字列を使用しようとしているがタイプInt64型(ロング) –

+1

ID変数 – Marc

+0

おかげでマルクです。 +1してください。 – shahkalpesh

0

解析する文字列はどこですか? "TurnLeft"のような文字列をTagLabels.TurnLeftに変換しようとしていませんか?

MSDN

+0

私は列挙型を考慮すると、あなたがToInt64をすることができ –

1

SomeIDは文字列であり、あなたの列挙型は長いです。

ではなく、「0x0000000000000000000012107A8D」

4

Enum.Parseにマルクの提案後に変更はEnum.Parse("TurnLeft")のように、列挙型のvalにシンボル名の文字列表現に変換することを意図しています。あなたが持っているものが数値を与える文字列であれば、文字列を対応する整数型として解析し、それをEnum valにキャストする必要があります。

IDs = (TagLabels)long.Parse("0x0000000000000000000012107A8D"); 
関連する問題