Rumah > pembangunan bahagian belakang > C++ > Mengapa Tidak Menghantar Int ke Nilai Enum Tidak Sah dalam C# Membuang Pengecualian?

Mengapa Tidak Menghantar Int ke Nilai Enum Tidak Sah dalam C# Membuang Pengecualian?

Linda Hamilton
Lepaskan: 2025-01-03 04:55:45
asal
189 orang telah melayarinya

Why Doesn't Casting an Int to an Invalid Enum Value in C# Throw an Exception?

Menghantar Int ke Nilai Enum Tidak Sah Tidak Membuang Pengecualian

Pertimbangkan kod C# berikut:

enum Beer
{
    Bud = 10,
    Stella = 20,
    Unknown
}
Salin selepas log masuk

Lazimnya, adalah dijangkakan bahawa menghantar integer di luar julat enum, seperti berikut, akan membuang an pengecualian:

int i = 50;
var b = (Beer)i;
Salin selepas log masuk

Walau bagaimanapun, kod di atas tidak membuang pengecualian dan sebaliknya mengeluarkan '50' kepada konsol.

Gelagat Rangka Kerja BERSIH

Ini disebabkan kepada keputusan reka bentuk dalam Rangka Kerja .NET. Enum disokong oleh jenis nilai lain (int, short, byte, dll.), dan oleh itu boleh mempunyai sebarang nilai yang sah untuk jenis nilai tersebut.

Implikasi dan Penyelesaian

Sementara ini tingkah laku boleh mengelirukan, ia juga membenarkan penciptaan enum "Bit Flag", di mana corak binari digunakan untuk mewakili gabungan bendera yang berbeza dalam nilai enum. Mentakrifkan setiap kombinasi bendera yang mungkin secara eksplisit akan menjadi membosankan.

Untuk menangani isu nilai enum yang tidak ditentukan, adalah disyorkan untuk menggunakan kaedah utiliti yang gagal dengan cepat, seperti:

public static class EnumUtil<T>
{
    public static T DefinedCast(object enumValue)
    {
        if (!System.Enum.IsDefined(typeof(T), enumValue))
            throw new InvalidCastException(enumValue + " is not a defined value for enum type " +
                                           typeof(T).FullName);
        return (T)enumValue;
    }
}
Salin selepas log masuk

Kaedah ini membuang pengecualian jika nilai hantaran tidak ditakrifkan untuk jenis enum.

Atas ialah kandungan terperinci Mengapa Tidak Menghantar Int ke Nilai Enum Tidak Sah dalam C# Membuang Pengecualian?. 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