Как я могу выразить этот метод таким образом, чтобы общие перечисления - PullRequest
0 голосов
/ 09 декабря 2018

Я не могу найти способ выразить этот метод в общий метод.Цель состоит в том, чтобы использовать любое помеченное перечисление.Было бы здорово, если бы кто-то мог помочь.

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 и т. Д.

ОБНОВЛЕНИЕ Решение

thx to @ Flydog57

инициализировать значения

1-й важный совет;)

    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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...