2010-04-27 25 views

Trả lời

128
public static bool IsNullableEnum(this Type t) 
{ 
    Type u = Nullable.GetUnderlyingType(t); 
    return (u != null) && u.IsEnum; 
} 
38

EDIT: Tôi sẽ rời câu trả lời này lên vì nó sẽ công việc, và nó thể hiện một vài cuộc gọi mà người đọc có thể không biết. Tuy nhiên, Luke's answer chắc chắn là đẹp hơn - đi upvote nó :)

Bạn có thể làm:

public static bool IsNullableEnum(this Type t) 
{ 
    return t.IsGenericType && 
      t.GetGenericTypeDefinition() == typeof(Nullable<>) && 
      t.GetGenericArguments()[0].IsEnum; 
} 
+0

Tôi nghĩ tôi đã làm theo cách của Luke; ít phức tạp hơn cho người gọi. –

+1

@Marc: Tôi không thấy làm thế nào nó làm cho bất kỳ tỷ lệ cược cho * người gọi * - nhưng cách của Luke chắc chắn là đẹp hơn tôi. –

+0

Vâng chắc chắn giữ nó để tham khảo trong tương lai – adrin

0
public static bool IsNullable(this Type type) 
{ 
    return type.IsClass 
     || (type.IsGeneric && type.GetGenericTypeDefinition == typeof(Nullable<>)); 
} 

tôi rời ra IsEnum kiểm tra xem bạn đã thực hiện, vì điều đó làm cho phương pháp này tổng quát hơn.

5

Kể từ C# 6.0 câu trả lời được chấp nhận có thể được refactored như

Nullable.GetUnderlyingType(t)?.IsEnum == true 

Các == true là cần thiết để chuyển đổi bool? bool

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