2012-06-13 23 views
7

Bạn có thể làm điều gì đó như sau trong C#?Làm thế nào để có được Loại Nullable <Enum>?

Type _nullableEnumType = typeof(Enum?); 

Tôi đoán một câu hỏi tốt hơn là lý do tại sao bạn không thể làm điều đó khi bạn có thể làm điều này:

Type _nullableDecimalType = typeof(decimal?); 
+1

Không có loại thực sự như vậy - bạn định sử dụng nó như thế nào? 'Enum' chính nó là một kiểu tham chiếu, không phải là một kiểu giá trị. –

Trả lời

14

Enumkhông phải là một enum - đó là cơ sở đẳng cấp cho enums, và là kiểu tham chiếu (ví dụ: class). Điều này có nghĩa là Enum? là bất hợp pháp, vì Nullable<T> có hạn chế là T : structEnum không thỏa mãn điều đó.

Vì vậy: hoặc sử dụng typeof(Nullable<>).MakeGenericType(enumTypeKnownAtRuntime), hoặc đơn giản hơn, typeof(EnumTypeKnownAtCompileTime?)

Bạn cũng có thể muốn lưu ý rằng:

Enum x = {some value}; 

là một hoạt động đấm bốc, vì vậy bạn thường nên tránh sử dụng Enum như một tham số, vv

+0

wow Tôi đã bỏ lỡ nó :) –

+0

Giải thích tuyệt vời Mark. Cảm ơn. – devlife

Các vấn đề liên quan