假设我有一个看起来像这样的课程:
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;
}
}
有更好的方法吗?
答案 0 :(得分:6)
int index = list.FindIndex(m => m.Member == someMember);
答案 1 :(得分:3)
如果你可以使用Linq
SomeClass aClasss = list.FirstOrDefault(item => item.Member == someMember);
答案 2 :(得分:1)
对于列表,您可以使用扩展搜索方法(使用反射),其中属性名称和搜索值是输入参数。
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);