将枚举转换为自定义对象列表?

时间:2012-06-21 05:42:25

标签: c# enums

我有这个枚举:

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

我有一个自定义对象

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

}

我希望将我的所有枚举成员都放入MyKeyValuePair列表中。 我怎么能这样做?

2 个答案:

答案 0 :(得分: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 Melody中支持DescriptionAttribute,这使得各种枚举任务更简单,但其他属性需要更多的工作。

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

答案 1 :(得分: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;
    }
}