日期:2014-05-17  浏览次数:20840 次

泛型,反射
本帖最后由 xiaoqiaoluanwu 于 2013-04-24 15:11:28 编辑
下边这段代码 支持对可控类型的转换


   
      if (!typeof(T).IsGenericType)
      {
         // 如果是非泛型的话 怎么判断是否非可空类型
           if(可空类型)
               return (T)Convert.ChangeType(convertibleValue,Nullable.GetUnderlyingType(typeof(T)));
           else
               return (T)Convert.ChangeType(convertibleValue, typeof(T));
      }
      else
      {
          Type genericTypeDefinition = typeof(T).GetGenericTypeDefinition();
          if (genericTypeDefinition == typeof(Nullable<>))
          {
              return (T)Convert.ChangeType(convertibleValue,Nullable.GetUnderlyingType(typeof(T)));


但是有一个问题是 如果是非泛型的话 怎么判断是否非可空类型?
泛型?反射,可空类型

------解决方案--------------------
非泛型用obj.GetType()方法获取类型。
------解决方案--------------------
学习了,泛型用的比较少…
------解决方案--------------------
Nullable<T> where T : struct
if(typeof(T).IsValueType)  这样?
但是MSDN明确地说了,可空类型都是System.Nullable<T>结构体的“实例”
所以if (!typeof(T).IsGenericType) 似乎是多余的
------解决方案--------------------
if (default(T) == null) //可空类型