列挙型は確かに混乱する可能性があります。列挙型に値を取り、一致するすべてのビットの名前を返す拡張メソッドを作成しようとしています。
与えられた:
[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
ますが、列挙型インスタンスのフィールドのみを返すようにするにはどうすればよいですか?
助けてくれてありがとう、
キース