簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM