2010-07-08 2 views

ответ

14

Вы можете использовать Nullable.GetUnderlyingType(Type) - это будет возвращать null, если это не обнуляемым типа, чтобы начать с, или базовый тип значения в противном случае:

if (Nullable.GetUnderlyingType(t) != null) 
{ 
    // Yup, t is a nullable value type 
} 

Обратите внимание, что это использует Nullable статический класс, а не Nullable<T> состав.

+0

+1 Идентификатор, вероятно, идет с этим, поскольку он намного чище, а также смотрит на Reflector, это также проверяет, не является ли тип не общим определением типа. – SwDevMan81

7
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) 
{ 
    // it is a nullable type 
} 

Это как Microsoft рекомендует вам Identify Nullable Types

+1

Вау - это странная рекомендация для Microsoft сделать, учитывая, что для этого есть встроенный метод. (См. Мой ответ.) –

+0

Да, кажется, это немного длиннее. Глядя на ваш, может быть, он возвращает null, если его не является типом NULL, и что, хотя вы можете использовать его для проверки того, является ли тип нулевым, это не строго предназначено для этой цели? (хотя это быстрее!) – w69rdy

+0

@ w69wrdy: Ну, это дает больше информации, чем вам нужно, - но она дает вам всю информацию, которую вы * требуете, и более простым способом. Это очень мало * менее эффективно в случае, когда это тип с нулевым значением, так как он также будет получать аргументы общего типа ... но я бы стал читабельнее и простота в любой день. –

0
int? i; 
bool isNullable = i is Nullable; 

Edit: Nevermind, это не работает.

+2

Вы попробовали это? –

+0

Это, похоже, не работает, я получаю предупреждение этого компилятора: Данное выражение никогда не относится к предоставленному ('System.Nullable') типу – RobSullivan

+1

@RobSullivan: Да, он проверяет совместимость с классом System.Nullable static. .. который никогда не будет работать. Я предполагаю, что у вас есть экземпляр типа 'Type' btw - если у вас есть * действительная переменная * с конкретным типом, то вы уже знаете результат ... –

Смежные вопросы