日期:2014-05-18  浏览次数:20805 次

使用反射时遇到的问题
protected void FillDataReaderToT<T>(ref T tableStruct, SqlDataReader thisReader)
  {
  //FieldInfo[] fieldInfos = typeof(T).GetFields();
  thisReader.Read();
  for (int i = 0; i < thisReader.FieldCount ; i++)
  {
  FieldInfo fieldInfo = tableStruct.GetType().GetField(thisReader.GetName(i).ToLower());
  if(fieldInfo!=null)
  fieldInfo.SetValue(tableStruct, thisReader.GetValue(i));
  }
   
  }

T tableStruct:是传入的一个struct,已经初始化。
为什么在执行fieldInfo.SetValue(tableStruct, thisReader.GetValue(i));
时,tableStruct始终不能获得值

------解决方案--------------------
protected void FillDataReaderToT<T>(ref T tableStruct, SqlDataReader thisReader)
{
//加这行 把它先box 起来
object obj = (object)tableStruct;
thisReader.Read();
for (int i = 0; i < thisReader.FieldCount; i++)
{
FieldInfo fieldInfo = tableStruct.GetType().GetField(thisReader.GetName(i));
if (fieldInfo != null)
{

object val = thisReader.GetValue(i);
//用obj 来set value
fieldInfo.SetValue(obj, val);
}
}
//加这行把obj unbox
tableStruct = (T)obj;
}