跳過到頁腳內容
Iron Academy Logo
學習 C#
學習 C#

其他分類

理解 C# 設置標誌枚舉:指派標誌

Tim Corey
9分鐘57秒

在使用C#處理權限、配置或設定時,我們經常遇到需要將多個值存儲在單個變數中的情況。 我們可以使用Flag Enums來替換為每個設定使用單獨的布林值。 此方法利用二進制運算來高效地在單個整數值中管理多個選項。

在本文中,我們將基於Tim Corey的影片Binary in C#: Assigning Flags in 10 Minutes or Less來深入探討如何在C#中設置Flag Enums。 Tim演示了如何使用二進制運算分配多個值,使我們的代碼更高效且可讀。 讓我們開始探索。

Flag Enums介紹

Tim首先解釋這堂課程是C#二進制理解系列的一部分。 在這段視頻中,他專注於如何使用二進制運算分配標誌。 標誌允許我們在單個整數中存儲多個值,使權限管理變得更加簡單和有效。

使用位或運算指派多個標誌

Tim演示了如何使用位或運算 (|)運算符。 他創建了一個列舉SystemPermissions,其中包含不同的權限級別,如SQL、Redis和BuildSystem。 我們可以將所有權限存儲在一個值中,而不是使用多個變數。

將多個權限指派給變數的範例:

// Assume that SystemPermissions is an enum with values SQL, Redis, and BuildSystem
SystemPermissions TimPermissions = SystemPermissions.SQL | SystemPermissions.Redis;

// Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions);
// Assume that SystemPermissions is an enum with values SQL, Redis, and BuildSystem
SystemPermissions TimPermissions = SystemPermissions.SQL | SystemPermissions.Redis;

// Print the current permissions - it will include both SQL and Redis
Console.WriteLine(TimPermissions);

顯示二進制表示形式

為了更好地理解正在發生的事情,Tim建議使用Convert.ToString(value, 2)將整數值轉換為其二進制形式。 這使我們能夠可視化哪些位被設置:

// Convert the permissions to a binary string to see the set bits
Console.WriteLine(Convert.ToString((int)TimPermissions, 2));
// Convert the permissions to a binary string to see the set bits
Console.WriteLine(Convert.ToString((int)TimPermissions, 2));

這表明不同的位位置對應於不同的權限,展示了我們如何能夠在一個整數中存儲多個設置。

使用或等於添加更多權限

Tim解釋說,我們可以動態地使用`|=運算符來添加更多的權限:

// Add the BuildSystem permission to the existing permissions
TimPermissions |= SystemPermissions.BuildSystem;

// Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions);
// Add the BuildSystem permission to the existing permissions
TimPermissions |= SystemPermissions.BuildSystem;

// Print the updated permissions - it now includes SQL, Redis, and BuildSystem
Console.WriteLine(TimPermissions);

理解32位限制

Tim強調了一個重要的考慮因素:C#中的整數數據類型有32位限制。 這意味著我們只能在int中存儲最多32個唯一的標誌。 如果我們需要超過32個標誌,應考慮使用long(64位)甚至多個值。 然而,在大多數情況下,32個標誌已經足夠了。

在數據庫中儲存標誌

使用旗標枚舉的一個最大優勢是它們可以高效地存儲於數據庫中。 我們可以存儲一個整數值來表示所有權限,而不是存儲多個布林列。 Tim解釋這種方法顯著減少了數據庫的複雜性和存儲需求。

例如,如果TimPermissions被儲存為37,它代表以下的組合:

  • SQL (位元 1)
  • Redis (位元 3)
  • BuildSystem (位元 5)

當我們從數據庫檢索該值時,可以輕鬆解碼以確定活動的權限。

結論

Tim總結了Flag Enums的強大功能。 利用二進制運算,我們可以在單個整數中高效地管理多個狀態。 這項技術提升了性能,簡化了數據存儲,並使我們的代碼更易讀。

依循此方法,您可以使用C# Flag Enums實現一個乾淨且可擴展的權限管理系統。 觀看完整影片以獲得更好的理解。

Hero Worlddot related to 理解 C# 設置標誌枚舉:指派標誌
Hero Affiliate related to 理解 C# 設置標誌枚舉:指派標誌

通過分享您所愛的東西賺得更多

您是否在為使用.NET、C#、Java、Python或Node.js的開發者創建內容?將您的專業知識轉化為額外收入!

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我