动态搜索通用列表

时间:2019-02-06 08:23:58

标签: c# list search

我正在尝试创建一个函数来动态搜索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方法,但是没有运气。有谁知道如何执行此功能。

1 个答案:

答案 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;
    }
}