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
Lepaskan: 2024-12-30 17:24:11
asal
161 orang telah melayarinya

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
}
Salin selepas log masuk

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;
}
Salin selepas log masuk

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
Salin selepas log masuk

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??)
Salin selepas log masuk

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!

sumber:php.cn
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