Я не могу найти способ выразить этот метод в общий метод.Цель состоит в том, чтобы использовать любое помеченное перечисление.Было бы здорово, если бы кто-то мог помочь.
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();
}