Предполагая, что «код» должно быть просто строковое представление целого числа, это звучит, как вы хотите что-то вроде:
// 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
}
Атрибуты также позволяют добавлять другие данные - например, если вы не хотите чтобы просто быть целочисленным представлением, вы можете поместить это в перечисление. Вам нужно будет получить атрибуты с отражением. У меня есть поддержка DescriptionAttribute
в пределах Unconstrained Melody, которая упрощает различные задачи перечисления, но для других атрибутов потребуется немного больше работы.
Опять же, еще один вариант - просто построить словарь или набор непосредственно в коде с использованием инициализатора коллекции. Честно говоря, недостаточно ясно, что вы после. Надеюсь, что некоторые из них помогут.
Это атрибут встроенной вещи C#? o.O – Alxandr
@Alxandr: 'DescriptionAttribute' не встроен в язык, нет. Это обычный атрибут. (Атрибуты сами * * встроены в язык, хотя.) –
Да, я знаю это (я пишу много C# и сам делал аммутацию атрибутов), но то, о чем я подумал, было больше похоже; будет ли 'DisplayAttribute' изменять' ToString' перечисления? Причина, по которой мне когда-то приходилось делать что-то подобное, и то, что я сделал, это сделать свой собственный атрибут и использовать метод 'ToString' xD – Alxandr