goo*_*ate 13 c# enums .net-4.0 enum-flags
我正在尝试新的HasFlags功能,并想知道以下是否应该工作:
enum.HasFlag(AccessRights.Read | AccessRights.Write)
......因为它似乎不...
DBAccessRights rights = (DBAccessRights)permission.PermissionFlags;
if (rights.HasFlag(DBAccessRights.WikiMode))
{
// works
}
if (rights.HasFlag(DBAccessRights.WikiMode | DBAccessRights.CreateNew))
{
// Doesn't work
}
DBAccessRights flags = DBAccessRights.WikiMode | DBAccessRights.CreateNew;
if (rights.HasFlag(flags))
{
// Doesn't work
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 30
鉴于文档,如果值具有这两个标志,我希望返回true .
如果您希望它测试您的值是否具有这些标志中的任何一个,那么您将需要它
value.HasFlag(AccessRights.Read) | value.HasFlag(AccessRights.Write)
Run Code Online (Sandbox Code Playgroud)
如果这对你来说不够好,你可能想看看我的Unconstrained Melody项目.它恰好已经具有您想要的功能(作为扩展方法Flags.cs):
// Same as value.HasFlag(AccessRights.Read | AccessRights.Write)
value.HasAll(AccessRights.Read | AccessRights.Write)
// Same as value.HasFlag(AccessRights.Read) | value.HasFlag(AccessRights.Write)
value.HasAny(AccessRights.Read | AccessRights.Write)
Run Code Online (Sandbox Code Playgroud)
那些会让它更清晰,IMO.他们也避免拳击,并且类型安全:)
Ani*_*Ani 20
来自MSDN:
HasFlag方法返回以下布尔表达式的结果.
thisInstance和flag = flag
对于诸如的复杂标志AccessRights.Read | AccessRights.Write,这将检查是否存在所有 "包含"标志.
您可能想要检查是否存在任何标志,在这种情况下您可以执行以下操作:
myAccessRights & (AccessRights.Read | AccessRights.Write) != 0
Run Code Online (Sandbox Code Playgroud)