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

[C#]关于一个反射的问题。
public struct dfInfoPic
{
  decimal _ID;
  public decimal ID
  {
  get { return
 _ID; }
  set { _ID = value; }
  }
}

  private T test<T>(T df,string property) where T : struct
  {
  df.GetType().GetProperty(property).SetValue(df, 3m, null);
  return df;
  }

  dfInfoPic df = new dfInfoPic();
  df.ID = 1m;
  Response.Write(df.ID);
  Response.Write("<br/>");
  object sid = df;
  sid.GetType().GetProperty("ID").SetValue(sid, 2m, null);

  Response.Write(((dfInfoPic)sid).ID);
  Response.Write("<br/>");
  Response.Write(this.test<dfInfoPic>(df, "ID").ID);


预计结果应该是:
1
2
3
但现在的运行结果却是
1
2
1

想问一下,两行红色部份的代码有什么不同?

------解决方案--------------------
private T test <T >(T df,string property) where T : struct 
{
object t = df;
df.GetType().GetProperty(property).SetValue(t, 3m, null); 
return (T)t; 
}

跟反射没关系,看下装拆箱和传值。