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

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

Barbara Streisand
Lepaskan: 2025-02-02 15:01:09
asal
259 orang telah melayarinya

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]

[Flags]
public enum Options
{
    None = 0,
    Option1 = 1,
    Option2 = 2,
    Option3 = 4,
    Option4 = 8
}
Salin selepas log masuk
atribut

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

Perhatikan perbezaan:

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"
Salin selepas log masuk
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:
[Flags]
public enum MyColors
{
    Yellow,  // 0
    Green,   // 1
    Red,     // 2
    Blue     // 3
}
Salin selepas log masuk

untuk memeriksa sama ada bendera ditetapkan, gunakan
[Flags]
public enum MyColors
{
    Yellow = 1,
    Green = 2,
    Red = 4,
    Blue = 8
}
Salin selepas log masuk
(untuk .net 4 dan kemudian):

HasFlag()

atau, untuk versi yang lebih tua. NET, gunakan bitwise dan pengendali:
if (myProperties.AllowedColors.HasFlag(MyColor.Yellow))
{
    // Yellow is present
}
Salin selepas log masuk

ini berfungsi kerana bendera adalah kuasa dua:
if ((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow)
{
    // Yellow is present
}
Salin selepas log masuk

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

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan