Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah atribut enum C# [Flags] meningkatkan operasi bitwise dan kebolehbacaan penghitungan?
[Flags] Atribut yang disenaraikan dalam [ C#: Memahami peranannya
Apabila menentukan penghitungan dalam C#, jika penghitungan mewakili set nilai dan bukannya satu nilai, anda boleh menggunakan harta [bendera]. Atribut ini amat berguna dalam penghitungan pengendali penggunaan.
Berbeza dengan salah faham sejagat, atribut [bendera] menyediakan borang perwakilan yang lebih mudah dibaca melalui kaedah . Penghitungan yang ditandai dengan [bendera] akan mengeluarkan nilainya, dan nilai dipaparkan dalam bentuk tanda pemisahan koma.
Nilai kuasa 2 .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>Ia mesti ditekankan bahawa atribut [bendera] tidak secara automatik menetapkan nilai kuasa 2 untuk penghitungan. Jika nilai nilai dilangkau, pemegangan operasi dalam kedudukan tidak betul, kerana nilai lalai meningkat dari 0.
pernyataan yang betul:
Dapatkan nilai yang berbeza:
Untuk mendapatkan nilai yang berbeza dalam atribut penghitungan, anda boleh menggunakan pelbagai kaedah:
<code class="language-csharp">[Flags] public enum MyColors { Yellow = 1, Green = 2, Red = 4, Blue = 8 }</code>
Gunakan <.> (. Net 4 dan versi yang lebih tinggi tersedia):
.HasFlag()
<code class="language-csharp"> if (myProperties.AllowedColors.HasFlag(MyColor.Yellow)) { // Yellow is allowed... }</code>Mekanisme yang mendasari
[Flags] Ciri -ciri dibenarkan untuk mengendalikan nilai binari dengan beroperasi dengan pengkomputeran bit. Dengan menggunakan nilai kuasa 2 sebagai nilai penghitungan, binari asas nilai bermakna ia membolehkan pengiraan yang cekap dan bermakna.
<code class="language-csharp"> if ((myProperties.AllowedColors & MyColor.Yellow) == MyColor.Yellow) { // Yellow is allowed... }</code>Sebagai contoh, jika atribut dibenarkan menggunakan binari mengikut bit atau |
Dalam beberapa penghitungan, ia mengandungi 0 nilai (biasanya dinamakan "Tiada"). Walau bagaimanapun, perlu diperhatikan bahawa kedudukan dan & operasi yang terlibat dalam nilai tiada selalu kembali 0, jadi ia tidak sesuai untuk menguji tanda -tanda tertentu. Anda boleh menggunakan perbandingan logik.
Untuk maklumat lanjut dan sumber mengenai atribut [bendera], mod penggunaan dan reka bentuknya, lihat dokumentasi MSDN.
Atas ialah kandungan terperinci Bagaimanakah atribut enum C# [Flags] meningkatkan operasi bitwise dan kebolehbacaan penghitungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!