我找不到将这种方法表达为通用方法的方法。 目标是使用任何标记的枚举。 如果有人可以帮助,那就太好了。
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();
}