如何以通用枚举的方式表达此方法

时间:2018-12-09 17:58:07

标签: c# generics enums

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

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();
  }
}

最好的问候 茨温尼

PS:目前不考虑NULL检查等。

更新解决方案

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();
}

扩展方法

    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();
    }

0 个答案:

没有答案