在C#中,由班级成员之一搜索班级列表的最佳方法是什么?

时间:2009-11-12 02:23:10

标签: c# search list

假设我有一个看起来像这样的课程:

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

有更好的方法吗?

3 个答案:

答案 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);