2016-10-09 12 views
0

私は、オブジェクトの名前と値を与え、ビットのテキスト名を返す関数を書いています。これらのビット名はさまざまな列挙型で定義されています。ここに私の機能の本質があります。後でキャストするために変数に列挙型を配置する方法はありますか?

string BitName(string object_name, long bit_value) { 

    string bit_name="";  

    switch(object_name) { 
    case "STATUS_WORD" : 
     bit_name = ((eStatusWord)bit_value).ToString(); 
     break; 
    case "TRAJ_STATUS" : 
     bit_name = ((eTrajectoryStatus)bit_value).ToString(); 
     break; 
    } 
    return bit_name; 
} 

この単純なアプローチはうまくいきましたが、多くの複製されたコードを作成するアクションが追加されました。

最低限、enum型を変数に入れてキャストに使用したいと思います。次のようなものがあります。

Type my_type = eStatusWord;   
    bit_name = ((my_type)bit_value).ToString(); 
    // addition actions that are type dependent 

可能であれば、ディクショナリはswitch文を置き換えることができます。

+0

'辞書 '例えば、あなたは' Convert.ChangeType() 'を使うかもしれません。 –

答えて

1

Enum.ToObjectは、タイプを知ることで列挙型を動的に再構成できます。そこから

、あなたが列挙型に文字列をマッピングし、その値を再構築するためにDictionary<string, Typeを使用することができます。

bit_name = Enum.ToObject(dictionary[object_name], bit_value).ToString(); 

辞書を移入するには、typeofを使用します。

dictionary.Add("STATUS_WORD", typeof(eStatusWord)); 
関連する問題