Tôi đang viết hàm có số Enum
và chuyển nó thành uint
. Từ những gì tôi đã nhìn thấy khi truyền tới int
, trước tiên bạn phải truyền đến một đối tượng: (int) (object) myEnumValue
. Nếu bạn viết (int) myEnumValue
bạn sẽ nhận được một ngoại lệ thời gian biên dịch.Đúc Enum thành uint
Bây giờ, khi tôi cố gắng truyền nó sang uint, tôi đã mong rằng (uint) (object) myEnumValue
sẽ không sao. Nó biên dịch độc đáo, nhưng khi chạy, nó tạo ra một InvalidCastException
. Vì vậy, để làm cho nó hoạt động, tôi đã sử dụng
(uint) (int) (object) myEnumValue
Tôi nghĩ có vẻ vui, vì vậy tôi khá vui, nhưng tại sao lại như vậy?
Có lẽ nó đã có chính xác hơn để hỏi tại sao nó không thể bỏ object
để uint
, nhưng tôi quan tâm đến việc liệu có một cách khác để đi từ một Enum
để uint
. Lanhung?
Edit:
Bối cảnh là một chức năng, một cái gì đó như thế này:
public static uint ToUInt (Enum e)
{
return (uint) (int) (object) e;
}
Sửa 2:
Giải pháp tốt nhất được nêu bởi thecoop:
Convert.ToUInt32(e)
Ok, vì vậy nếu tôi chỉ định Enum là Enum: uint, nó sẽ là một cách khác? –
@ Jonatan: vâng, điều đó sẽ đóng hộp enum như uint, và bạn sẽ bị buộc phải unbox như uint. –
Đúng vậy: (uint) e sẽ ổn, nhưng (int) e sẽ phát nổ. –