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 }
tidak secara ajaib membolehkan operasi bitwise; Fungsi terasnya adalah untuk meningkatkan output kaedah [Flags]
. ToString()
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"
menunjukkan jumlah berangka. SuitsFlags
Suits
dengan kritikal,
mesti [Flags]
melakukan ini secara manual untuk operasi bitwise yang betul. Penggunaan yang tidak betul:
[Flags] public enum MyColors { Yellow, // 0 Green, // 1 Red, // 2 Blue // 3 }
untuk memeriksa sama ada bendera ditetapkan, gunakan
[Flags] public enum MyColors { Yellow = 1, Green = 2, Red = 4, Blue = 8 }
HasFlag()
if (myProperties.AllowedColors.HasFlag(MyColor.Yellow)) { // Yellow is present }
ini berfungsi kerana bendera adalah kuasa dua:
if ((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow) { // Yellow is present }
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
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!