[英]In C#, what's the best way to search a list of a class by one of the class's members?
假設我有一個看起來像這樣的類:
class SomeClass {
int m_member;
public int Member {
get { return m_member; }
set { m_member = value; }
}
}
在其他地方,我有一個List<SomeClass> list
。
如果我想在列表中搜索該類的特定實例,我可以這樣做
int index = list.IndexOf(someInstance);
但如果我想通過會員搜索列表,我必須這樣做:
int index = -1;
for (int i = 0; i < list.Count; i++) {
if (list[i].Member == someMember) {
index = i;
break;
}
}
有一個更好的方法嗎?
int index = list.FindIndex(m => m.Member == someMember);
如果你可以使用Linq
SomeClass aClasss = list.FirstOrDefault(item => item.Member == someMember);
對於列表,您可以使用擴展搜索方法(使用反射),如下所示,其中屬性名稱和搜索值是輸入參數。
public static List<T> SearchList<T>(this List<T> list, string PropertyName, string SearchValue)
{
return list.Select(item =>
new
{
i = item,
Props = item.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)
})
.Where(item => item.Props.Any(p =>
{
var val = p.GetValue(item.i, null);
return val != null
&& (p.Name.ToLower() == PropertyName.ToLower() || string.IsNullOrEmpty(PropertyName))
&& (val.ToString().ToLower().Contains(SearchValue.ToLower()) || string.IsNullOrEmpty(SearchValue));
}))
.Select(item => item.i)
.ToList();
}
電話:
List<Employee> employees = new List<Employee>();
var searchedEmployees = data.SortList(serachProperty, searchValue);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.