Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah atribut enum C# [Flags] meningkatkan operasi bitwise dan kebolehbacaan penghitungan?

Bagaimanakah atribut enum C# [Flags] meningkatkan operasi bitwise dan kebolehbacaan penghitungan?

Barbara Streisand
Barbara Streisandasal
2025-02-02 14:56:10429semak imbas

How Does the C# [Flags] Enum Attribute Enhance Bitwise Operations and Enumeration Readability?

[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.

[bendera] Kepentingan atribut

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):

    Gunakan pengendali kedudukan (sebelum .net 4):
  • .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 |
none = 0 Value

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!

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