我写了个功能,就是讲DataRow中的列的值赋值给属性名和列名相同的属性。
比如 PropertyInfo pInfo=......;
pInfo.SetValue(objInst,row["xxx"],null);
但是,row["xxx"]的值后面带空格。比如数据库中是char(4)的,我存了个S,读出来后后S后面会自动带上空格。这种做法就会导致赋的值也是S后面带空格的。我想先object obj=(object)row["xxx"].ToString().Trim();//此处的强制类型转换时没有必要的。
 PropertyInfo pInfo=......;
pInfo.SetValue(objInst,obj,null);、这时setValue会报异常,大意是object指向的一个String类型。大致问题如上描述!!!!!!注意如下红字的问题!我想寻求一个解决办法,就是去掉多余的空格,又能将值放进去、!!!!!!!!
当然,我有这么一个思路,深入一点的就是,比如我有一个String  “123”,这个对象在堆中的类型索引的对象是String。[color=#FF0000]有没有办法构造一个类型索引的对象是Object,但是这个Object的值也是“123”,然后调用SetValue的时候把这个Object放进去,是不是就能正常赋值了[/color]

解决方案 »

  1.   

    public IList <T> GetList <T>(DataTable table)   
      {   
      IList <T> list = new List <T>();   
      T t = default(T);   
      PropertyInfo[] propertypes = null;   
      string tempName = string.Empty;   
      foreach (DataRow row in table.Rows)   
      {   
      t = Activator.CreateInstance <T>();   
      propertypes = t.GetType().GetProperties();   
      foreach (PropertyInfo pro in propertypes)   
      {   
      tempName = pro.Name;   
      if (table.Columns.Contains(tempName))   
      {   
      object value = row[tempName];   
      pro.SetValue(t, value, null);   
      }   
      }   
      list.Add(t);   
      }   
      return list;   
      }   
      

  2.   

    没解决我的问题啊row[tempName] 这个里面如果带有空格。你设置进去的值也是有空格的。
    我想问的其实就是在
    object value = row[tempName];  
      pro.SetValue(t, value, null);
    时吧空格去掉 
     
      

  3.   


    但是使用Trim和Regex.Replace都要将值先ToString()。 这样处理后,就是如我之前描述的setValue会报异常大意是object指向的一个String类型。
      

  4.   

    试试这样
    string obj = row["xxx"].ToString().Trim();
    不行的话,你应该把异常信息贴出来,我觉得你理解的应该是错的
      

  5.   

    其实可以用proprtyInfo.type判断下是否是String 是的话就转成string trim 
      

  6.   

    其实可以用proprtyInfo.type判断下是否是String 是的话就转成string trim