C # Тип отраженного свойства - PullRequest
3 голосов
/ 29 апреля 2009

Я использую отражение, чтобы получить значения из анонимного типа:

object value = property.GetValue(item, null);

когда базовое значение имеет тип NULL (T?), Как я могу получить базовый тип, если значение равно нулю?

С учетом

int? i = null;

type = FunctionX(i);
type == typeof(int); // true

Ищем FunctionX (). Надеюсь, это имеет смысл. Спасибо.

Ответы [ 3 ]

6 голосов
/ 29 апреля 2009

Вы можете сделать что-то вроде этого:

if(type.IsgenericType)
{
   Type genericType = type.GetGenericArguments()[0];
}

EDIT: Для общего использования:

public Type GetTypeOrUnderlyingType(object o)
{
   Type type = o.GetType();
   if(!type.IsGenericType){return type;}
   return type.GetGenericArguments()[0];
}

использование:

int? i = null;

type = GetTypeOrUnderlyingType(i);
type == typeof(int); //true

Это будет работать для любого общего типа, не только Nullable.

2 голосов
/ 29 апреля 2009

Если вы знаете, что это Nullable<T>, вы можете использовать статический помощник GetUnderlyingType(Type) в Nullable.

int? i = null;

type = Nullable.GetUnderlyingType(i.GetType());
type == typeof(int); // true
0 голосов
/ 29 апреля 2009

из того, что я понимаю по http://blogs.msdn.com/haibo_luo/archive/2005/08/23/455241.aspx, вы просто получите возвращаемую версию типа Nullable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...