C# 在泛型列表中动态搜索
我正在尝试创建一个函数来动态搜索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
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
不是问题的技术描述。您为什么对属性名这样做?这个方法是如何使用的?“不走运”的实际含义是什么?此方法将被调用多次,每次都使用不同的属性名和值。据我所知,在编译时不知道属性名?是的,这是正确的。编译时不知道属性名。不走运
不是问题的技术描述