Перечисления могут быть непонятными. Я пытаюсь создать метод расширения для типа Enum, который будет принимать значение и возвращать имена всех совпадающих битов.
Дано:
[Flags]
public enum PlanetsEnum
{
Mercury=1,
Venus=2,
Earth=4,
Mars=8,
Jupiter=16,
//etc....
}
Я хотел бы создать метод расширения, который возвращает словарь только выбранных значений. Так что если:
PlanetsEnum neighbors = PlanetsEnum.Mars | PlanetEnum.Venus; //10
IDictionary dict = neighbors.ToDictionary();
foreach (KeyValuePair<String, Int32> kvp in dict)
{
Console.WriteLine(kvp.Key);
}
/*
* Should Print:
* Mars
* Venus
*/
Я бы ожидал, что Марс и Венера будут записаны на консоль, но вместо этого я вижу все значения PlanetEnum. Вот мой код метода расширения:
public static IDictionary<string, Int32> ToDictionary(this Enum enumeration)
{
Type type = enumeration.GetType();
return Enum.GetValues(type).Cast<Int32>().ToDictionary(field => Enum.GetName(type, field));
}
Кто-нибудь видит, что я делаю неправильно? Я знаю, что Enum.GetValues
возвращает все поля типа enum, как мне получить его, чтобы он возвращал только поля экземпляра enum?
Большое спасибо за любую помощь,
Keith