我无法找到一种方法将此方法表达为通用方法 . 目标是使用任何标记的枚举 . 如果有人可以提供帮助,那就太好了 .

class Program
{
  [Flags]
  public enum MyRights
  {
      Read, Write, Delete, CreateChild, FullRights
  }

  static void Main(string[] args)
  {
      MyRights myRights = new MyRights();
      myRights = MyRights.Read | MyRights.Delete;

      var kvpList = GetList(myRights);
      Console.ReadKey();
  }

  private static List<KeyValuePair<string, int>> GetList(MyRights myRights)
  {
      return Enum.GetValues(typeof(MyRights)).Cast<MyRights>()
          .Where((enumValue) => myRights.HasFlag(enumValue))
          .Select((enumValue) => 
             new KeyValuePair<string, int>(enumValue.ToString(), (int)enumValue))
          .ToList();
  }
}

最好的问候Tzwenni

PS:目前不关于NULL检查等 .

UPDATE Solution

thx到@ Flydog57

初始化值

第一个重要提示;)

public enum MyRights
    {
        Read = 0x01, Write = 0x02, Delete = 0x04, CreateChild = 0x08
    }

然后:我无法将值转换为int . 但使用HashCode工作正常:

private static List<KeyValuePair<string, int>> GetListGeneric<TEnum>(TEnum myRights) 
        where TEnum : Enum 
{
    return Enum.GetValues(typeof(TEnum)).Cast<TEnum>()
        .Where((enumValue) => myRights.HasFlag(enumValue))
        .Select((enumValue) =>  
            new KeyValuePair<string, int>(enumValue.ToString(), enumValue.GetHashCode())
        ).ToList();
}

Extension method

static List<TEnum> ToList<TEnum>(this TEnum myRights) where TEnum : Enum
    {
        return Enum.GetValues(typeof(TEnum)).Cast<TEnum>().Where((enumValue) =>
            myRights.HasFlag(enumValue)).Select((enumValue) => enumValue).ToList();
    }