2012-05-02 9 views
-1

文字列を解析してuintの値を定義できるかどうか疑問に思っていました。 http://msdn.microsoft.com/en-us/library/essfb559.aspxと似たようなものです。私は次の宣言を持っているのであれば:私は、コンポーネント1のUINT値に文字列のコンポーネント1を解析することができるようにしたいconstをconstに変換する文字列を定義する

<node name="node1" port="12345"> 
    <component>COMPONENT1</component> 
    <component>COMPONENT2</component> 
</node> 

public const uint COMPONENT1 = START_OF_COMPONENT_RANGE + 1; 
public const uint COMPONENT2 = START_OF_COMPONENT_RANGE + 2; 
public const uint COMPONENT3 = START_OF_COMPONENT_RANGE + 3; 

、XMLファイルを持っているには、次のように定義されました。これは、番号5001、5002 f.e.の代わりにxmlファイルの簡単な概要を持つためです。

辞書や配列を定義すれば解決できると思いますが、余分なコードが残っていると思います。

+0

正確な質問は何ですか? – Jon

+0

文字列COMPONENT1を使用してCOMPONENT1のuint値を取得したい – Andreas

+0

あなたはすでにそれを行うメソッドへのリンクを持っています。何が問題になっていますか? – Jon

答えて

1

定数が必要ない場合はenumタイプと一緒にToStringおよびParseメソッドと一緒に使用できます。

public enum Compontents 
{ 
    COMPONENT1 = 1, 
    COMPONENT2 = 2 
} 

public static class ComponentsHelper 
{ 
    public static Compontents GetComponent(this string compString) 
    { 
     return (Compontents)Enum.Parse(typeof(Compontents), compString); 
    } 

    public static uint ToValue(this Compontents comp) 
    { 
     return (uint)comp; 
    } 

    public static uint GetComponentValue(this string compString) 
    { 
     return compString.GetComponent().ToValue(); 
    } 

} 

あなたが本当に大きなswitch文を記述する必要がありますよりも、定数が必要な場合。

+0

大丈夫なので、例と同様のメソッドを列挙型で使用する方法はありません。 – Andreas

+0

定数ではない - コンパイラ/ランタイムは可能な値を知っているので、enumは動作します。リフレクションを使用せずに定数に対してこれを行う方法はありませんが、これはお勧めできません(パフォーマンス)。列挙型を使用するか、大きなswitch文を使用してグローバル静的関数を使用するだけです – Carsten

関連する問題