我正在尝试创建一个函数来动态搜索C#中的通用列表。
我创建了一个使用反射的函数。
List<T> Search<T>(List<T> lst, string propertyName, string value)
{
var searchedList = (from item in lst
where item.GetType()
.GetProperty(propertyName)
.GetValue(item)
.ToString() == value
select item)
.ToList();
}
此外,我试图使用反射来在列表上调用FindALL方法,但是没有运气。有谁知道如何执行此功能。
答案 0 :(得分:2)
我会将反射移出循环并可能有一个比较器。
public IEnumerable<T> ReflectionSearch<T>(IEnumerable<T> items, string propName, string value, StringComparer comparer = null)
{
var t = typeof(T).GetProperty(propName);
if (t == null) throw new Exception("No such prop");
comparer = comparer ?? StringComparer.OrdinalIgnoreCase;
foreach (var item in items)
{
var v = t.GetValue(item)?.ToString();
if (comparer.Equals(v, value))
yield return item;
}
}