Rumah >pembangunan bahagian belakang >C++ >Mengapa C# Enums Boleh Mempunyai Nilai Integer Bukan Unik, dan Bilakah Saya Harus Mengelak Ini?

Mengapa C# Enums Boleh Mempunyai Nilai Integer Bukan Unik, dan Bilakah Saya Harus Mengelak Ini?

Barbara Streisand
Barbara Streisandasal
2024-12-30 01:19:11544semak imbas

Why Can C# Enums Have Non-Unique Integer Values, and When Should I Avoid This?

Nilai Enum Bukan Unik

Soalan:

Mengapa C# membenarkan berbilang nilai enum untuk diberikan nilai integer asas yang sama? Adakah selamat untuk menggunakan enum untuk tujuan ini, atau patutkah struct digunakan sebaliknya?

Jawapan:

Bertentangan dengan kepercayaan popular, enum dalam C# bukanlah sesuatu yang istimewa jenis tetapi struct yang berasal daripada System.Enum. Apabila anda mengisytiharkan enum, pengkompil menghasilkan struct dengan pemalar bernama untuk nilai enum.

Takrifan enum anda:

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

Diterjemahkan kepada:

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

Oleh kerana struct boleh mempunyai berbilang pemalar dengan nilai yang sama, adalah mungkin untuk menentukan enum dengan nilai bukan unik. Walau bagaimanapun, ini boleh menyebabkan ketidakkonsistenan apabila menukar kepada enum:

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

Perbandingan Warna.Merah == Warna.Hijau juga akan menilai kepada benar, yang boleh mengelirukan.

Sementara itu adalah sah untuk menggunakan enum dengan nilai bukan unik, adalah disyorkan untuk menggunakannya hanya apabila ia masuk akal. Jika anda memerlukan nilai unik, pertimbangkan untuk menggunakan struct atau Kamus sebaliknya.

Atas ialah kandungan terperinci Mengapa C# Enums Boleh Mempunyai Nilai Integer Bukan Unik, dan Bilakah Saya Harus Mengelak Ini?. 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