【问题标题】:Dynamically search in a generic list在通用列表中动态搜索
【发布时间】:2019-02-06 08:23:58
【问题描述】:

我正在尝试创建一个函数以在 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 方法,但没有成功。有谁知道如何执行此功能。

【问题讨论】:

  • 您是否有理由对属性名称执行此操作?这种方法是如何使用的? “没有运气”的实际含义是什么?
  • 这个方法会被调用多次,每次使用不同的属性名和值
  • 我是否理解在编译时不知道属性名称?
  • 是的,这是正确的。编译时不知道属性名称。
  • no luck 不是问题的技术描述

标签: c# list search


【解决方案1】:

我会将反射移出循环,并可能有一个比较器。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2019-07-20
    相关资源
    最近更新 更多