Pertimbangkan kod C# berikut:
enum Beer { Bud = 10, Stella = 20, Unknown }
Lazimnya, adalah dijangkakan bahawa menghantar integer di luar julat enum, seperti berikut, akan membuang an pengecualian:
int i = 50; var b = (Beer)i;
Walau bagaimanapun, kod di atas tidak membuang pengecualian dan sebaliknya mengeluarkan '50' kepada konsol.
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.
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; } }
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!