|

在C#中可以对整型运算对象按位进行逻辑运算。按位进行逻辑运算的意义是:依次取被运算对象的每个位,进行逻辑运算,每个位的逻辑运算结果是结果值的每个位。C#支持的位逻辑运算符如下图所示:
基本權限設計:
///<summary>
///權限列舉
///</summary>
[FlagsAttribute]
publicenumPermissions
{
[Description("未設定")]
None=0,
[Description("建立")]
Create=1,
[Description("讀取")]
Read=2,
[Description("更新")]
Update=4,
[Description("刪除")]
Delete=8,
[Description("所有功能")]
All=Create|Read|Update|Delete
}
技巧一:利用2的次方值,來作為列舉值以便日後做位元運算(&AND、|OR、^XOR)。
技巧二:現有權限中,加入新權限動作。(OR運算)
Permissionspermission=Permissions.None;
permission=permission|Permissions.Create;
MessageBox.Show(permission.ToString());
//Result:Create
技巧三:加入【FlagsAttribute】標籤
Permissionspermission=Permissions.None;
permission=permission|Permissions.Create;
MessageBox.Show(permission.ToString());
//Result:Create([FlagsAttribute]不影響結果)
permission=permission|Permissions.Read;
MessageBox.Show(permission.ToString());
//Result:3(未加入[FlagsAttribute])
//Result:Create,Read(加入[FlagsAttribute])
技巧四:現有權限中,移除某個權限動作。(XOR與AND運算應用)
Permissionspermission=Permissions.None;
permission=permission|Permissions.Create;
MessageBox.Show(permission.ToString());
//Result:Create
permission=permission|Permissions.Read;
permission=permission|Permissions.Update;
MessageBox.Show(permission.ToString());
//Result:Create,Read,Update
permission=(permission&(Permissions.All^Permissions.Read));
MessageBox.Show(permission.ToString());
//Result:Create,Update
技巧五:判斷現在權限中,是否擁有某個權限(AND運算)
Permissionspermission=Permissions.None;
permission=permission|Permissions.Create;
MessageBox.Show(permission.ToString());
//Result:Create
permission=permission|Permissions.Read;
permission=permission|Permissions.Update;
MessageBox.Show(permission.ToString());
//Result:Create,Read,Update
permission=(permission&(Permissions.All^Permissions.Read));
MessageBox.Show(permission.ToString());
//Result:Create,Update
boolIsCreatable=false;
if((permission&Permissions.Create)==Permissions.Create)
{
IsCreatable=true;
}
else
{
IsCreatable=false;
}
MessageBox.Show(IsCreatable.ToString());
//Result:True
|
上一篇:System.MissingMethodException: 找不到方法:“Void Dapper.DynamicP...下一篇:C#中virtual和(抽象)abstracth和接口(interface)的相同点与区别...
|