Rumah >pembangunan bahagian belakang >C++ >Bolehkah Berbilang Nilai Enum Berkongsi Nilai Asas yang Sama dalam C#?

Bolehkah Berbilang Nilai Enum Berkongsi Nilai Asas yang Sama dalam C#?

Patricia Arquette
Patricia Arquetteasal
2024-12-30 17:24:11175semak imbas

Can Multiple Enum Values Share the Same Underlying Value in C#?

Menyingkap Misteri Nilai Enum Bukan Unik

Semasa cuba mengelirukan kedudukan indeks dalam fail EDI, penemuan yang mengejutkan telah dibuat: keupayaan untuk memberikan berbilang nilai kepada enum yang sama. Tingkah laku yang kelihatan luar biasa ini telah menimbulkan persoalan tentang logik di sebaliknya dan potensi implikasinya.

Enum, nampaknya, pada asasnya adalah struktur yang diwarisi daripada System.Enum. Di sebalik tabir, nilai enum ditakrifkan sebagai pemalar. Sebagai contoh, takrifan enum berikut:

public enum Color
{
    Red = 1,
    Blue = 1,
    Green = 1
}

secara berkesan bersamaan dengan pseudo-kod berikut:

public struct Color : System.Enum
{
    public const int Red = 1;
    public const int Blue = 1;
    public const int Green = 1;
}

Ini mendedahkan bahawa enum pada asasnya adalah koleksi pemalar dengan yang sama nilai asas. Walaupun dalam C# adalah dilarang untuk mentakrifkan struct dengan kelas asas yang jelas, ini adalah tepat apa yang diterjemahkan oleh definisi enum.

Akibatnya, tiada konflik yang wujud dalam mempunyai berbilang pemalar dengan nilai yang sama dalam jenis enum. Walau bagaimanapun, ini boleh menyebabkan kekaburan apabila menukar kepada enum. Contohnya:

Color color1 = (Color)1; // Returns Red
Color color2 = (Color)Enum.Parse(typeof(Color), "1"); // Also returns Red

Nilai yang diberikan kepada kedua-dua warna1 dan warna2 secara teknikalnya bukan Merah tetapi 1. Namun, apabila dicetak, ia kelihatan sebagai Merah.

Selain itu, membandingkan enum bukan unik nilai mungkin menghasilkan keputusan yang membingungkan:

bool b = Color.Red == Color.Green; // True (Red is Green??)

Walaupun perbandingan mungkin kelihatan tidak betul secara logik, ia adalah akibat daripada nilai asas yang sama.

Akhirnya, penggunaan nilai enum bukan unik adalah soal pertimbangan. Adalah penting untuk menimbang risiko dan faedah dengan teliti sebelum menggunakan pendekatan ini.

Atas ialah kandungan terperinci Bolehkah Berbilang Nilai Enum Berkongsi Nilai Asas yang Sama 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