2

私はこの列挙を持っています:

public enum Translation     
{   
    English=1,
    Russian, 
    French,  
    German  
} 

カスタムオブジェクトがあります

public class MyKeyValuePair
{
    string code {set;get;}
    string text {set;get;}

}

すべての列挙メンバーをMyKeyValuePairのリストに入れたいです。これどうやってするの?

4

2 に答える 2

4

「コード」が整数の文字列表現であると仮定すると、次のようなものが必要なように聞こえます。

// Type and property names changed for sanity
var pairs = Enum.GetValues(typeof(Translation))
                .Cast<Translation>()
                .Select(t => new KeyValuePair { 
                            Code = ((int) t).ToString(),
                            Text = t.ToString()
                        });

テキスト表現として列挙値名を使用することは非常に制限されていることに注意してください-有効なC#識別子のみを使用できます。少なくともオーバーライドとして、属性を使用してテキストを説明することは、長期的には有益であると思われるかもしれません。

public enum Translation {
    ...
    [Description("Traditional Chinese")]
    TraditionalChinese
}

属性を使用すると、他のデータを追加することもできます。たとえば、コードを整数表現にしたくない場合は、それを列挙型に入れることができます。リフレクションを使用して属性を取得する必要があります。Unconstrained MelodyDescriptionAttribute内でサポートしているので、さまざまな列挙型タスクが簡単になりますが、他の属性にはもう少し作業が必要になります。

繰り返しになりますが、別のオプションは、コレクション初期化子を使用して、コードで直接辞書またはセットを作成することです。正直なところ、あなたが何を求めているのかは十分に明確ではありません。しかし、これのいくつかが役立つことを願っています。

于 2012-06-21T05:44:43.977 に答える
0

単純; 次のような静的メソッドを作成します。

public static mykeyvaluePair Translate(Translation translation) {
    switch(translation) {
        case Translation.English:
            return new mykeyvaluePair { code = "en", text = "English" };
        case Translation.Russian:
            return new mykeyvaluePair { code = "ru", text = "Russian" };
        default:
            return null;
    }
}
于 2012-06-21T05:45:44.103 に答える