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
}

属性还允许您添加其他数据 - 例如,如果您不希望代码只是整数表示,则可以将其放入枚举中。您需要通过反射来获取属性。我支持DescriptionAttributeUnconstrained Melody中,这使得各种枚举任务更简单,但其他属性需要更多的工作。

同样,另一种选择是使用集合初始化程序直接在代码中构建字典或集合。老实说,你所追求的还不够清楚。希望其中一些有所帮助。

于 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 回答