Chinaunix首页 | 论坛 | 博客
  • 博客访问: 80469
  • 博文数量: 64
  • 博客积分: 1545
  • 博客等级: 上尉
  • 技术积分: 392
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-23 15:23
文章分类

全部博文(64)

文章存档

2013年(1)

2012年(63)

我的朋友

分类: 嵌入式

2012-12-01 21:44:31


点击(此处)折叠或打开

  1. using System;
  2.     public partial class User_Default : System.Web.UI.Page
  3.     {
  4.         protected void Page_Load(object sender, EventArgs e)
  5.         {
  6.             MemberInfo infoMember = new MemberInfo();
  7.             System.Reflection.PropertyInfo p = infoMember.GetType().GetProperty("ID");
  8.             p.SetValue(infoMember, Convert.ChangeType("7", p.PropertyType), null);
  9.         }
  10.     }
  11.     public class MemberInfo
  12.     {
  13.         Int32 _ID;
  14.         public Int32 ID
  15.         {
  16.             get { return _ID; }
  17.             set { _ID = value; }
  18.         }
  19.     }


以上成功,但当将int改为int?时

点击(此处)折叠或打开

  1. using System;

  2. public partial class User_Default : System.Web.UI.Page
  3. {
  4.     protected void Page_Load(object sender, EventArgs e)
  5.     {
  6.         MemberInfo infoMember = new MemberInfo();
  7.         System.Reflection.PropertyInfo p = infoMember.GetType().GetProperty("ID");
  8.         p.SetValue(infoMember, Convert.ChangeType("7", p.PropertyType), null);
  9.     }


  10. }
  11. public class MemberInfo
  12. {
  13.     Int32? _ID;
  14.     public Int32? ID
  15.     {
  16.         get { return _ID; }
  17.         set { _ID = value; }
  18.     }
  19. }
报错:
从“System.String”到 “System.Nullable`1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]” 的强制转换无效。


解决方法:

定义ConvertTo扩展方法,我们就可以进行任意的类型转化了——不论目标类型是可空值类型,还是非可空值类型
public static class ConvertionExtensions
{
    public static T ConvertTo(this IConvertible convertibleValue)
    {
        if (string.IsNullOrEmpty(convertibleValue.ToString()))
        {
            return default(T);
        }
        if (!typeof(T).IsGenericType)
        {
            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)));
            }
        }
        throw new InvalidCastException(string.Format("Invalid cast from type \"{0}\" to type \"{1}\".", convertibleValue.GetType().FullName, typeof(T).FullName));
    }
}

p.SetValue(infoMember, Convert.ChangeType("7", p.PropertyType), null);
将上面这句话改成下面这句:
p.SetValue(infoMember, "7".ConvertTo>(), null);





阅读(7503) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~