Есть ли способ проверить, что тип является типом перечисления? - PullRequest
5 голосов
/ 20 января 2011

Кто-то дает мне тип т.

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

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

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

Ответы [ 2 ]

10 голосов
/ 20 января 2011

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

Type t = typeof(DayOfWeek);
bool isEnum = t.IsEnum;
3 голосов
/ 20 января 2011

Есть несколько способов достичь этого:

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

или

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

или (теперь, когда я видел , он существует при проверке IsValueType)

return t.IsEnum;

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

...