Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah atribut [bendera] meningkatkan fungsi enum dalam C#?

Bagaimanakah atribut [bendera] meningkatkan fungsi enum dalam C#?

Barbara Streisand
Barbara Streisandasal
2025-02-02 15:01:09260semak imbas

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

memahami atribut [bendera] dalam c# enums

c# enums, apabila dihiasi dengan atribut

, berubah dari mewakili nilai tunggal ke dalam set pilihan. Ini amat berguna apabila menggunakan pengendali bitwise. Mari kita ilustrasikan: [Flags]

<code class="language-csharp">[Flags]
public enum Options
{
    None = 0,
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8
}</code>
atribut

tidak secara ajaib membolehkan operasi bitwise; Fungsi terasnya adalah untuk meningkatkan output kaedah [Flags]. ToString()

Perhatikan perbezaan:

<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>
Memaparkan bendera individu, sedangkan

menunjukkan jumlah berangka. SuitsFlags Suits dengan kritikal,

tidak secara automatik memberikan kuasa dua. Anda

mesti [Flags] melakukan ini secara manual untuk operasi bitwise yang betul. Penggunaan yang tidak betul:

Penggunaan yang betul:
<code class="language-csharp">[Flags]
public enum MyColors
{
    Yellow,  // 0
    Green,   // 1
    Red,     // 2
    Blue     // 3
}</code>

untuk memeriksa sama ada bendera ditetapkan, gunakan
<code class="language-csharp">[Flags]
public enum MyColors
{
    Yellow = 1,
    Green = 2,
    Red = 4,
    Blue = 8
}</code>
(untuk .net 4 dan kemudian):

HasFlag()

atau, untuk versi yang lebih tua. NET, gunakan bitwise dan pengendali:
<code class="language-csharp">if (myProperties.AllowedColors.HasFlag(MyColor.Yellow))
{
    // Yellow is present
}</code>

ini berfungsi kerana bendera adalah kuasa dua:
<code class="language-csharp">if ((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow)
{
    // Yellow is present
}</code>

bitwise atau menggabungkan bendera; bitwise dan mengasingkan mereka.
<code>Yellow: 0001
Green:  0010
Red:    0100
Blue:   1000</code>

Elakkan menggunakan bitwise dan untuk memeriksa

; ia akan sentiasa palsu. Gunakan perbandingan logik sebaliknya untuk melihat sama ada mana -mana bendera ditetapkan.

None = 0 atribut

adalah alat yang berkuasa untuk menguruskan set pilihan dalam C# enums, memanfaatkan operasi bitwise untuk manipulasi bendera yang cekap.

Atas ialah kandungan terperinci Bagaimanakah atribut [bendera] meningkatkan fungsi enum dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn