Проверка, является ли экземпляр Типа nullable перечислением в C#

Как я проверяю, является ли Тип nullable перечислением в C# что-то как

Type t = GetMyType();
bool isEnum = t.IsEnum; //Type member
bool isNullableEnum = t.IsNullableEnum(); How to implement this extension method?
80
задан adrin 27 April 2010 в 16:33
поделиться

4 ответа

public static bool IsNullableEnum(this Type t)
{
    Type u = Nullable.GetUnderlyingType(t);
    return (u != null) && u.IsEnum;
}
157
ответ дан 24 November 2019 в 09:48
поделиться

РЕДАКТИРОВАТЬ: Я собираюсь оставить этот ответ, так как он будет работать, и он демонстрирует несколько вызовов, о которых читатели могут не знать иначе. Однако ответ Люка определенно лучше - проголосуйте за него :)

Вы можете сделать:

public static bool IsNullableEnum(this Type t)
{
    return t.IsGenericType &&
           t.GetGenericTypeDefinition() == typeof(Nullable<>) &&
           t.GetGenericArguments()[0].IsEnum;
}
42
ответ дан 24 November 2019 в 09:48
поделиться
1
ответ дан 24 November 2019 в 09:48
поделиться
public static bool IsNullable(this Type type)
{
    return type.IsClass
        || (type.IsGeneric && type.GetGenericTypeDefinition == typeof(Nullable<>));
}

Я не учел уже выполненную вами проверку IsEnum , так как это делает этот метод более общим.

1
ответ дан 24 November 2019 в 09:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: