C#反映的财产类型

时间:2009-04-29 15:45:51

标签: c# reflection

我使用反射来获取匿名类型的值:

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

当底层值是可空类型(T?)时,如果值为null,如何获取基础类型?

鉴于

int? i = null;

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

寻找FunctionX()。希望这是有道理的。感谢。

3 个答案:

答案 0 :(得分:6)

您可以这样做:

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

编辑: 用于一般用途:

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。

答案 1 :(得分:2)

如果您知道Nullable<T>,则可以使用GetUnderlyingType(Type)中的静态助手Nullable

int? i = null;

type = Nullable.GetUnderlyingType(i.GetType());
type == typeof(int); // true

答案 2 :(得分:0)

根据我对http://blogs.msdn.com/haibo_luo/archive/2005/08/23/455241.aspx的理解,您将获得返回类型的Nullable版本。