Giới thiệu
Phương thức Type.GetEnumUnderlyingType() trả về kiểu dữ liệu nền tảng (underlying type) của enum (mặc định là int, có thể là byte, short, long, v.v.). Cần lấy Type của enum trước.
Ví dụ 1: Lấy underlying type của enum hợp lệ
using System;
public class Demo
{
enum Vehicle { Car, Bus, Bike, Airplane }
public static void Main()
{
try
{
Vehicle v = Vehicle.Bike;
Type type = v.GetType();
string[] str = type.GetEnumNames();
Console.WriteLine("GetEnumNames() = " + string.Join(", ", str));
Type type2 = type.GetEnumUnderlyingType();
Console.Write("Enum Underlying type = " + type2);
Console.WriteLine("\nListing constants ..");
for (int i = 0; i < str.Length; i++)
Console.Write("{0} ", str[i]);
}
catch (ArgumentException e)
{
Console.WriteLine("Not an enum!");
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
Kết quả
GetEnumNames() = Car, Bus, Bike, Airplane Enum Underlying type = System.Int32 Listing constants .. Car Bus Bike Airplane
Ví dụ 2: Thử với kiểu không phải enum
using System;
public class Demo
{
enum Vehicle { Car, Bus, Bike, Airplane }
public static void Main()
{
try
{
Type type = typeof(int);
string[] str = type.GetEnumNames();
Console.WriteLine("GetEnumNames() = " + string.Join(", ", str));
Type type2 = type.GetEnumUnderlyingType();
Console.Write("Enum Underlying type = " + type2);
Console.WriteLine("\nListing constants ..");
for (int i = 0; i < str.Length; i++)
Console.Write("{0} ", str[i]);
}
catch (ArgumentException e)
{
Console.WriteLine("Not an enum!");
Console.Write("{0}", e.GetType(), e.Message);
}
}
}
Kết quả
Not an enum! System.ArgumentException
Các kiểu nền tảng hợp lệ cho enum
| Kiểu nền tảng | Kích thước | Phạm vi |
|---|---|---|
| byte | 8-bit | 0 đến 255 |
| sbyte | 8-bit | -128 đến 127 |
| short | 16-bit | -32,768 đến 32,767 |
| ushort | 16-bit | 0 đến 65,535 |
| int (mặc định) | 32-bit | -2B đến 2B |
| uint | 32-bit | 0 đến 4B |
| long | 64-bit | -9E18 đến 9E18 |
| ulong | 64-bit | 0 đến 1.8E19 |
Khai báo enum với kiểu nền tảng tùy chỉnh
enum SmallEnum : byte { A = 1, B = 2, C = 3 }
enum LargeEnum : long { X = 1000000, Y = 2000000 }
// Kiểm tra
Console.WriteLine(typeof(SmallEnum).GetEnumUnderlyingType()); // System.Byte
Console.WriteLine(typeof(LargeEnum).GetEnumUnderlyingType()); // System.Int64
Lưu ý
- Gọi trên Type không phải enum → ném
ArgumentException - Dùng
type.IsEnumkiểm tra trước khi gọi GetEnumNames()trả về tên các hằng sốGetEnumValues()trả về mảng giá trị