泛型方法,如何拿到T实例的属性?

intermost 2012-06-08 09:52:02
public class class1
{
public static void FillTD<T>(T obj)
{
class2 c2=new class2();
c2.name=obj.name;//?此时应该怎样写,才拿到T实例的name属性?

}

}
求帮助,多谢!
...全文
382 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
__天涯寻梦 2012-06-08
  • 打赏
  • 举报
回复
如果选择 .net 4.0 框架,还可以这样
public static void FillTD<T>(T obj)
{
class2 c2 = new class2();
dynamic d = obj;
c2.name = d.name;
}
cheng2005 2012-06-08
  • 打赏
  • 举报
回复
1,如果你需要保证T一定有Name属性,那么就用接口。
2,如果你不需要T一定有Name属性,那么就用反射。
yuandonghuia 2012-06-08
  • 打赏
  • 举报
回复
反射最灵活.
intermost 2012-06-08
  • 打赏
  • 举报
回复
在线等.多谢pengcwl,avphoenixi.
还有其他方法吗?
二号匪 2012-06-08
  • 打赏
  • 举报
回复
用反射



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

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

intermost 2012-06-08
  • 打赏
  • 举报
回复
调用此泛型方法时,我会给T传一个类对象,其中就包括Name属性,
楼上说的,定义为接口,是一种方法,但目前我无法这样实现了.
__天涯寻梦 2012-06-08
  • 打赏
  • 举报
回复
你可以定义一个接口
interface IName
{
string name { get; set; }
}

让后在方法里指定
public static void FillTD<T>(T obj) where T : IName
{
class2 c2=new class2();
c2.name=obj.name;//?此时应该怎样写,才拿到T实例的name属性?
}

传入的 T 类型一定要继承于 IName 接口
SocketUp 2012-06-08
  • 打赏
  • 举报
回复
不是所有T都有Name的

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧