最近實作了一個列舉的 Flag 來處理權限的機制,也在無意之間發現了 .NET 4.0 多了一個 HasFlag 這個 Function ,這倒是節省了很多寫 code 的程式與判斷。
如下的權限身分:
public enum SystemRoles { None = 0, // 0000 0000 0000 0000 0x0000 ReportUser = 1 << 0, // 0000 0000 0000 0001 0x0001 WebUser = 1 << 1, // 0000 0000 0000 0010 0x0002 ACCUser = 1 << 6, // 0000 0000 0100 0000 0x0040 HRUser = 1 << 7, // 0000 0000 1000 0000 0x0080 ReadyOnlyAdmin = 1 << 8, // 0000 0001 0000 0000 0x0100 ACCAdmin = 1 << 10, // 0000 0100 0000 0000 0x0400 HRAdmin = 1 << 11, // 0000 1000 0000 0000 0x0800 SystemAdmin = 1 << 14, // 0100 0000 0000 0000 0x4000 ITAdmin = 1 << 15, // 1000 0000 0000 0000 0x8000 }
如下面的情況,早期要得到 hasFlag1 的值,必須使用 hasFlag2 的方式,才能得到相同的結果,在程式的判讀上也比較吃力,現在使用 HasFlag() 的 Function 變得更簡單易懂了。
SystemRoles flagEnum = SystemRoles.WebUser | SystemRoles.HRUser | SystemRoles.ReportUser; bool hasFlag1 = flagEnum.HasFlag(SystemRoles.WebUser); bool hasFlag2 = ((flagEnum & SystemRoles.WebUser) != 0) ? true : false;
全站熱搜
留言列表