通过反射获取List对象中某个属性的值

狼王_ 2014-06-08 02:41:38

public List<string> Test(List<T> listData, string comboText)
{}

我想实现一个方法,用户传递一个List<T>对象和T对象中的一个字段名称给我,我通过这两个条件获取List<T>集合中comboText这个字段的值。我想应该是通过反射实现这个方法,但是才疏学浅,还请大家帮帮忙。。
...全文
2426 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
tinydyw 2014-06-24
  • 打赏
  • 举报
回复
当然你可以直接在第1个循环的时候用临时变量保存该属性在properties里的索引,后面直接用索引取..就稍微好一些...
tinydyw 2014-06-24
  • 打赏
  • 举报
回复
这个双重循环套反射...略有点那啥.... 就是遍历T.GetType().GetProperties()数组,有一个name还是什么的属性可以获取属性的引用名,然后循环和comboText的字段值对比,符合要求的就取出来....最好加上break,因为本来就已经很影响效率了...不知道有没有更好的做法,因为这样对比需要循环,集合又需要循环,而里面又是反射...
bxq_2461553677 2014-06-24
  • 打赏
  • 举报
回复
通过泛型查找不同属性的值 public class Finder { // 定义一个泛型方法,用来查找指定值在数组中的索引 public static int Find<T>(T[] items, T item) { for (int i = 0; i < items.Length; i++)//遍历泛型数组 { if (items[i].Equals(item))//判断是否找到了指定值 { return i;//返回指定值在数组中的索引 } } return -1;//如果没有找到,返回-1 } }
exception92 2014-06-09
  • 打赏
  • 举报
回复

 foreach (T temp in list)
threenewbee 2014-06-08
  • 打赏
  • 举报
回复
for (dynamic item in listData) { string s = item.comboText.ToString(); }
bwangel 2014-06-08
  • 打赏
  • 举报
回复 3
为毛一定要用反射呢,反射效率低下,特别是用在循环中。 你可以将T类型定义为继承一个接口 比如 interface IcomboText { string comboText;}} 这样就可以 listData.Select (i=> ((IcomboText)i).comboText); 代码稳定性和效率和反射比不是一个量级的
superliu1122 2014-06-08
  • 打赏
  • 举报
回复
var p = typeof(T).GetProperty(comboText); listData.Select(i => p.GetValue(i).ToString()).ToList(); 大致就这样 可能还需要判断空引用之类的,看你的具体情况了

110,536

社区成员

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

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

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