2009-03-19 11 views

答えて

1
private static readonly IDictionary<int, string> message_id = new Dictionary<int, string> 
     { 
      { 0x0000, "Foo" }, 
      { 0x0001, "Bar" } 
     }; 
+0

これはさらに素晴らしいです! – RobIII

5
public Enum MessageID { Foo = 0, Bar = 1, Fubar = 2 }; 

次に、あなたはEnum.Format()ToString()を使用して "文字列" のバージョンを取得することができます。

+0

D'oh ...私は間違った方向に考えていました。今私は愚かだと感じますか? – RobIII

+0

私は実際にbdukesのソリューションがさらに好きですが、それはとにかく辞書のデータが必要なためです。 – RobIII

+0

問題ありません。それはちょうど私が列挙を使う何かのように見えました。また、コードで定義するのではなく、設定ファイルから読み込むことを検討することもできます。そうすれば、別のメッセージIDを追加するためにアプリケーションを再コンパイルする必要はありません。 – tvanfosson

1

ような何か:

MessageId[] messageIds = new MessageId[] { 
    new MessageId(0x0000, "Foo"), 
    new MessageId(0x0001, "Bar"), 
    new MessageId(0x0002, "Fubar"), 
    ... 
}; 

(。あなたは適切なMessageIdコンストラクタを定義する場合は)

Cコードに最も近い同等だ - しかし、あなたは確かにあたりtvanfossonの答えとして列挙するかどうかを検討すべきかもしれませんより適切な設計の選択肢になります。

0

完全一致はありません。 C#ではstaticconstのクラスのフィールドを許可していません。あなたはreadonlyを使用することができます。あなたはローカルスコープでこれを使用している場合は、あなたが匿名タイピングの利益を取得し、これを行うことができます

var identifierList = new[] { 
    new MessageIdentifier(0x0000, "Foo"), 
    new MessageIdentifier(0x0001, "Bar"), 
    new MessageIdentifier(0x0002, "Fubar"), 
    ... 
}; 

でも、私はより良いthis solutionが好き。いっそ

1
private const value_string message_id[] = { 

    new value_string() { prop1 = 0x0000, prop2 = "Foo"}, 
    new value_string() { prop1 = 0x0001, prop2 = "Bar"}, 
    new value_string() { prop1 = 0x0002, prop2 = "Fubar"}, 
    ... 
    ... 
    ... 
} 

か、あなたは辞書のようにそれを使用している場合:

private const Dictionary<string, int> message_id = { 

    {"Foo", 0}, 
    {"Bar", 1}, 
    {"Fubar", 2}, 
    ... 
} 

がいる文字列値への鍵です。

関連する問題