枚举肯定会令人困惑。我正在尝试在 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
*/
我希望看到 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
是返回枚举类型的所有字段,我如何让它只返回枚举实例的字段?
非常感谢您的帮助,
基思