GetType для int64, возвращающего System.Nullable - PullRequest
5 голосов
/ 19 февраля 2009

У меня есть объект, который имеет свойство типа. Когда тип установлен в Int64, и я позже пытаюсь получить информацию о типе, я получаю System.Nullable.

Вот тип информации

{Name = "Nullable`1" FullName = "System.Nullable`1[[System.Int64, mscorlib, Version=2.0.0.0]]"}

Как мне получить этот тип System.Int64?

Ответы [ 5 ]

6 голосов
/ 19 февраля 2009

Похоже, у вас есть данный тип, для которого вы хотите либо этот тип, либо его базовый тип, если он равен Nullable<T>. Лучший способ сделать это было бы примерно так:

Nullable.GetUnderlyingType(yourObject.Type) ?? yourObject.Type;

Так как Nullabe.GetUnderlyingType возвращает null, если заданное Type не Nullable<T>, вы можете использовать нулевой оператор объединения (??) для задания значения по умолчанию для исходного типа.

1 голос
/ 05 июня 2012
if ( property.PropertyType.IsGenericType 
  && property.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>) )
1 голос
/ 19 февраля 2009
Type t = Nullable.GetUnderlyingType(nullableType);

См. MSDN .

0 голосов
/ 19 февраля 2009

Может быть, вы установили свойство type на "System.Int64?" в любом месте? В противном случае я не могу воспроизвести ваше поведение.

0 голосов
/ 19 февраля 2009

Если объект не нулевой, GetType вернет Int64.

...