我有这个枚举:
public enum Translation
{
English=1,
Russian,
French,
German
}
我有一个自定义对象
public class MyKeyValuePair
{
string code {set;get;}
string text {set;get;}
}
我希望将我的所有枚举成员都放入MyKeyValuePair列表中。 我怎么能这样做?
答案 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;
}
}