2011-01-20 2 views
4

Кто-то дает мне тип t.Есть ли способ проверить, является ли тип типом перечисления?

Я хотел бы знать, является ли этот тип перечислением или нет.

public bool IsEnumeration(Type t) 
{ 
    // Mystery Code. 
    throw new NotImplementedException(); 
} 

public void IsEnumerationChecker() 
{ 
    Assert.IsTrue(IsEnumeration(typeof(Color))); 
    Assert.IsFalse(IsEnumeration(typeof(float))); 
} 

ответ

10

Вы также можете проверить, используя свойство IsEnum на Type:

Type t = typeof(DayOfWeek); 
bool isEnum = t.IsEnum; 
+0

d'oh! Теперь я просто чувствую себя глупо. – user420667

+0

@user .NET огромен, никто не знает всех методов и свойств. – nan

3

Существуют различные способы, вы можете достичь этого:

return typeof(Enum).IsAssignableFrom(t) && t != typeof(Enum); 

или

return typeof(Enum).IsAssignableFrom(t) && t.IsValueType; 

или (теперь, когда я видел it exists при проверке IsValueType)

return t.IsEnum; 

Очевидно, что последний - лучший подход, но первые два подскажут, как справляться с подобными ситуациями.

+0

Спасибо, я буду держать это в виду. – user420667

+0

@ Downvoter: Зачем комментировать? –