首頁 >後端開發 >C++ >[標誌]屬性如何增強C#中的枚舉功能?

[標誌]屬性如何增強C#中的枚舉功能?

Barbara Streisand
Barbara Streisand原創
2025-02-02 15:01:09260瀏覽

How Does the [Flags] Attribute Enhance Enum Functionality in C#?

了解C#Enums中的[flags]屬性 c#枚舉,用

屬性裝飾時,會從將單個值表示為選項集。在僱用位運算符時,這特別有用。 讓我們說明:

[Flags]

<code class="language-csharp">[Flags]
public enum Options
{
    None = 0,
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8
}</code>
屬性不會神奇地啟用位置操作;它的核心功能是改善

方法的輸出。 [Flags] ToString()觀察差異:

<code class="language-csharp">enum Suits { Spades = 1, Clubs = 2, Diamonds = 4, Hearts = 8 }
[Flags] enum SuitsFlags { Spades = 1, Clubs = 2, Diamonds = 4, Hearts = 8 }

var str1 = (Suits.Spades | Suits.Diamonds).ToString(); // "5"
var str2 = (SuitsFlags.Spades | SuitsFlags.Diamonds).ToString(); // "Spades, Diamonds"</code>
>顯示單個標誌,而

顯示數值總和。 SuitsFlags 至關重要的是,Suits

不會自動分配兩個功率。 您必須手動執行此操作以進行正確的位操作。 不正確的用法:

[Flags] 正確的用法:

<code class="language-csharp">[Flags]
public enum MyColors
{
    Yellow,  // 0
    Green,   // 1
    Red,     // 2
    Blue     // 3
}</code>
檢查是否設置了標誌,請使用

(對於.net 4及以後):>

<code class="language-csharp">[Flags]
public enum MyColors
{
    Yellow = 1,
    Green = 2,
    Red = 4,
    Blue = 8
}</code>
或對於較舊的.NET版本,請使用位和運算符:

HasFlag()這起來起作用,因為標誌是兩個的功率:

>
<code class="language-csharp">if (myProperties.AllowedColors.HasFlag(MyColor.Yellow))
{
    // Yellow is present
}</code>

位或結合標誌;鑽頭並隔離它們。

>
<code class="language-csharp">if ((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow)
{
    // Yellow is present
}</code>
避免使用位並檢查

>;它永遠是錯誤的。使用邏輯比較,查看是否設置了任何標誌。

>
<code>Yellow: 0001
Green:  0010
Red:    0100
Blue:   1000</code>

屬性是用於管理C#枚舉中選項集的強大工具,利用位操作進行有效的標誌操作。

>

以上是[標誌]屬性如何增強C#中的枚舉功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn