泛型方法的一些疑问

viaivi 2009-08-21 04:43:52
现在两个类: Channel和Article,两都类都有属性id和name
泛型方法:
LoopReplace<T>(T obj)
{
return obj.id;
}
LoopReplace<Channel>(Channel channel);
在编译时会报类型T不存在id属性

我想实现的就是根据条件,确定使用某个类,有什么办法可以在这个泛型方法中,使用到类的属性吗?
...全文
111 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿非 2009-08-21
  • 打赏
  • 举报
回复

Type t = obj.GetType();
PropertyInfo[] properties = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo pi in properties)
{
Console.WriteLine("{0}:{1}", pi.Name, pi.GetValue(obj, null));

}

viaivi 2009-08-21
  • 打赏
  • 举报
回复
返回ID仅是个示例,为了把问题简单点让大家明白我的意思
页实际运用是:
string templateContent = 模版文件内容
LoopReplace <T>(T obj)
{
templateContent = templateContent.Replace("[field:id]",obj.id);
templateContent = templateContent.Replace("[field:name]",obj.name);
...............
}
viaivi 2009-08-21
  • 打赏
  • 举报
回复
上面那方法仅仅是个示例,我是在生成HTML的时候,用这两个类的属性去替换掉模版里的标签,看来泛型方法是不行了,只有写两个类,在根据情况来实例化了
ivws_19 2009-08-21
  • 打赏
  • 举报
回复
为什么一定要返回id,先返回obj不行?
syc958 2009-08-21
  • 打赏
  • 举报
回复
LoopReplace <T>(T obj)
{
return obj.id;
}


这个时候又不是你定义的类当然不会有这个属性你这样写写看:
LoopReplace <T>(T obj)
{
return obj;
}
LoopReplace <Channel>(Channel channel).id;
阿非 2009-08-21
  • 打赏
  • 举报
回复
要不定义Channel和Article 的抽象父类,要不 反射

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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