我写了个功能,就是讲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]
比如 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]
{
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;
}
我想问的其实就是在
object value = row[tempName];
pro.SetValue(t, value, null);
时吧空格去掉
但是使用Trim和Regex.Replace都要将值先ToString()。 这样处理后,就是如我之前描述的setValue会报异常大意是object指向的一个String类型。
string obj = row["xxx"].ToString().Trim();
不行的话,你应该把异常信息贴出来,我觉得你理解的应该是错的