Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在泛型列表中动态搜索_C#_List_Search - Fatal编程技术网

C# 在泛型列表中动态搜索

C# 在泛型列表中动态搜索,c#,list,search,C#,List,Search,我正在尝试创建一个函数来动态搜索C#中的泛型列表 我创建了一个使用反射的函数 List<T> Search<T>(List<T> lst, string propertyName, string value) { var searchedList = (from item in lst where item.GetType() .GetP

我正在尝试创建一个函数来动态搜索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();
}
列表搜索(列表lst、字符串属性名称、字符串值)
{
var searchedList=(来自lst中的项
where item.GetType()
.GetProperty(propertyName)
.GetValue(项目)
.ToString()=值
选择项目)
.ToList();
}

此外,我还尝试使用反射调用列表上的FindALL方法,但没有成功。有人知道如何执行此功能吗。

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

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;
    }
}
public IEnumerable ReflectionSearch(IEnumerable项,字符串propName,字符串值,StringComparer=null)
{
var t=typeof(t).GetProperty(propName);
如果(t==null)抛出新异常(“无此类属性”);
比较器=比较器??StringComparer.OrdinalIgnoreCase;
foreach(项目中的var项目)
{
var v=t.GetValue(项)?.ToString();
if(比较器等于(v,值))
收益回报项目;
}
}

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

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;
    }
}
public IEnumerable ReflectionSearch(IEnumerable项,字符串propName,字符串值,StringComparer=null)
{
var t=typeof(t).GetProperty(propName);
如果(t==null)抛出新异常(“无此类属性”);
比较器=比较器??StringComparer.OrdinalIgnoreCase;
foreach(项目中的var项目)
{
var v=t.GetValue(项)?.ToString();
if(比较器等于(v,值))
收益回报项目;
}
}

对属性名执行此操作有什么原因吗?这个方法是如何使用的?“不走运”的实际含义是什么?此方法将被调用多次,每次都使用不同的属性名和值。据我所知,在编译时不知道属性名?是的,这是正确的。编译时不知道属性名。
no luck
不是问题的技术描述。您为什么对属性名这样做?这个方法是如何使用的?“不走运”的实际含义是什么?此方法将被调用多次,每次都使用不同的属性名和值。据我所知,在编译时不知道属性名?是的,这是正确的。编译时不知道属性名。
不走运
不是问题的技术描述