标志枚举的使用
標志枚舉的使用大多是在標記多重狀態,比如說文件的屬性:只讀,可寫,隱藏,系統文件等相關屬性,都對應相應的標志位,如果在C#中想實現自己的標志枚舉,也是可以的,下文是親身試驗的一段代碼,希望對您有所幫助,也望您不吝賜教。
// 執行代碼 private void Form1_Load(object sender, EventArgs e) {Log.i("=========================================");StatusAttributes sa = StatusAttributes.Welcome | StatusAttributes.Login;Log.e(sa);Log.e(Convert.ToString((int)sa, 2));if ((sa & StatusAttributes.Login) == StatusAttributes.Login)Log.w("im login");// &按位與if ((sa & StatusAttributes.Meeting) != StatusAttributes.Meeting)Log.w("im not in meeting");// ^異或運算 不同則為1 相同則為0sa = sa ^ StatusAttributes.Meeting;Log.e(sa);Log.e(Convert.ToString((int)sa, 2));// ~取反Log.e(~sa);Log.e(Convert.ToString((int)~sa, 2));Log.i("=========================================");FileAttributes fa = (FileAttributes)10;Log.e(fa);if ((fa & FileAttributes.Administrator) == FileAttributes.Administrator)Log.w("created by administrator");if ((fa & FileAttributes.Hide) != FileAttributes.Hide)Log.w("file is show");FileAttributes fa2 = fa ^ FileAttributes.Hide;Log.e(fa2);if ((fa2 & FileAttributes.Readonly) != FileAttributes.Readonly)Log.w("file2 can read and write"); }注意:a << b 的意思為:二進制的a向左移動b位
// 枚舉類型 [Flags] public enum StatusAttributes {None = 0,Welcome = 1 << 0,Login = 1 << 1,Meeting = 1 << 2,Share = 1 << 4,Join = 1 << 8, } [Flags] public enum FileAttributes {None = 0,System = 1,Readonly = 2,Hide = 4,Administrator = 8, }輸出結果
12-27 16:42:32.019 i ========================================= 12-27 16:42:32.023 e Welcome, Login 12-27 16:42:32.024 e 11 12-27 16:42:32.024 w im login 12-27 16:42:32.024 w im not in meeting 12-27 16:42:32.024 e Welcome, Login, Meeting 12-27 16:42:32.024 e 111 12-27 16:42:32.025 e -8 12-27 16:42:32.025 e 11111111111111111111111111111000 12-27 16:42:32.025 i ========================================= 12-27 16:42:32.025 e Readonly, Administrator 12-27 16:42:32.025 w created by administrator 12-27 16:42:32.025 w file is show 12-27 16:42:32.025 e Readonly, Hide, Administrator最后列出如何位運算修改標志枚舉:
StatusAttributes sa = StatusAttributes.Login | StatusAttributes.Welcome; sa = sa | StatusAttributes.Join;//添加屬性 sa = sa | StatusAttributes.Share;//添加屬性 sa = (sa | StatusAttributes.Share) ^ StatusAttributes.Share;//刪除屬性 sa = (sa | StatusAttributes.Meeting) ^ StatusAttributes.Meeting;//刪除屬性總結
- 上一篇: Linux系统下启动MySQL的命令及相
- 下一篇: Nginx For Windows So