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

泛型方法,如何拿到T实例的属性?
public class class1
{
  public static void FillTD<T>(T obj)
  {
  class2 c2=new class2();
  c2.name=obj.name;//?此时应该怎样写,才拿到T实例的name属性?

  }

}
求帮助,多谢!

------解决方案--------------------
你可以定义一个接口
C# code
interface IName
{
    string name { get; set; }
}

------解决方案--------------------
用反射 

C# code


PropertyInfo p = obj.GetType().GetProperty("Name");

c2.name=(String/*类型转换*/)p.GetValue(obj.GetValue());

------解决方案--------------------
反射最灵活.
------解决方案--------------------
1,如果你需要保证T一定有Name属性,那么就用接口。
2,如果你不需要T一定有Name属性,那么就用反射。
------解决方案--------------------
如果选择 .net 4.0 框架,还可以这样
C# code
public static void FillTD<T>(T obj)
{
    class2 c2 = new class2();
    dynamic d = obj;
    c2.name = d.name;
}