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!