C# 长位掩码中的枚举值列表
我们有一个通过位掩码保护api控制器操作的应用程序。我要做的是根据位掩码值获取枚举列表 以下是一个示例枚举:C# 长位掩码中的枚举值列表,c#,enums,bitmask,C#,Enums,Bitmask,我们有一个通过位掩码保护api控制器操作的应用程序。我要做的是根据位掩码值获取枚举列表 以下是一个示例枚举: [Flags] public enum DriverChange : long { CanAccess = 1 << 0, CanView = 1 << 1, CanUpdate = 1 << 2, MayPerformBaseFunctions = 1 <&
[Flags]
public enum DriverChange : long
{
CanAccess = 1 << 0,
CanView = 1 << 1,
CanUpdate = 1 << 2,
MayPerformBaseFunctions = 1 << 3,
CanAddPool = 1 << 4,
CanModifyPool = 1 << 5,
}
我想做的是根据整数值获取
值的列表
我找到了,但它不适用于位移位值:
List<Permissions.DriverDataChange> permissionDetails =Enum.GetValues(typeof(Permissions.DriverDataChange))
.Cast<Enum>()
.Where(m => DriverDataChange.Full.HasFlag(m))
.Cast<Permissions.DriverDataChange>();
List permissionDetails=Enum.GetValues(typeof(Permissions.DriverDataChange))
.Cast()
.Where(m=>DriverDataChange.Full.HasFlag(m))
.Cast();
您的问题是您将DriverDataChange
中的数据定义为int
,而不是DriverChange
而是这样定义它们:
public const DriverDataChange View = (DriverDataChange.CanAccess |
DriverDataChange.CanView |
DriverDataChange.MayPerformBaseFunctions);
然后您可以查询它们:
var permissionDetails = Enum.GetValues(typeof(DriverDataChange)).Cast<DriverDataChange>()
.Where(m => DriverDataChangeData.View.HasFlag(m));
我不能改变。这就是现有的代码。它被定义为int,因为它表示赋值的二进制和。??你可以直接投。无论如何,听起来您最终将不得不更改它,因为基础枚举是一个
长的
,并且您的int值不足以包含它们。
var permissionDetails = Enum.GetValues(typeof(DriverDataChange)).Cast<DriverDataChange>()
.Where(m => DriverDataChangeData.View.HasFlag(m));
var permissionDetails = Enum.GetValues(typeof(DriverDataChange)).Cast<DriverDataChange>()
.Where(m => ((DriverDataChange)DriverDataChangeData.View).HasFlag(m));