我正在测试一个示例片段,我发现它是另一个问题的答案
然而,编译器正在吐出这个"运算符&&不能应用于long和bool类型的操作数".为什么这样做?当我阅读代码时,它会说"如果掩码和权限大于0则返回成功bool"
我读错了吗?
(另外,没有人把它称为一个坏的例子,所以我期望它能够工作.不是说我是一个复制粘贴编码器)
bool CheckMask( long Mask, long TestPermission ) {
return Mask && TestPermission > 0;
}
long mask = 4611686844973976575;
const long MASK_ViewListItems = 0x0000000000000001;
bool HasPermission_ViewListItems = CheckMask(mask, MASK_ViewListItems);
// HasPermission_ViewListItems is true
const long MASK_UseClientIntegration = 0x0000001000000000;
bool HasPermission_UseClientIntegration = CheckMask(mask, MASK_UseClientIntegration);
// HasPermission_UseClientIntegration is false
Run Code Online (Sandbox Code Playgroud)
StackOverflow上有很多类似的问题,我点击了大部分内容,在我输入时,我的右边有一个很大的列表.没有适用于我的情况,至少我能够看到答案和我的问题之间的关系.
Jon*_*eet 12
你正在使用&&(条件AND,仅对bool操作数有效)而不是&(按位AND,对bool操作数或整数操作数有效) - 我怀疑你想要后者,你也应该使用括号,因为优先规则.我也将参数名称更改为遵循.NET命名约定 - 并将其设置为静态,因为它不依赖于任何状态:
static bool CheckMask(long mask, long testPermission)
{
return (mask & testPermission) > 0;
}
Run Code Online (Sandbox Code Playgroud)
您可能还想更改为使用枚举而不是long:
[Flags]
public enum Permissions
{
ViewListItems = 1 << 0,
...
UseClientIntegration = 1 << 9
}
static bool CheckMask(Permissions mask, Permissions testPermission)
{
return (mask & testPermission) != 0;
}
Run Code Online (Sandbox Code Playgroud)