gpt4 book ai didi

c# - 尝试使用反射在集合中查找属性值

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:41 25 4
gpt4 key购买 nike

希望得到一点帮助。我正在传递一个集合,该集合...例如包含一个属性名称和值的实例。

searchLookups.Add(new SearchLookup() { SearchLookupName = "pernr", SearchLookupValue = 1022343 });

现在,如果存在相同的属性名称,我想 checkin 不同的集合,如果存在,我想将这些值添加到相同类型的集合中。

List<StaffMember> searchedMembers = new List<StaffMember>();

这是我正在检查属性名称和值是否存在的集合。

foreach (var staffmember in staffMembers)
{
Type t = staffmember.GetType();
PropertyInfo[] pi = t.GetProperties();
foreach (var sl in searchLookups)
{
if (pi.Where(p => p.Name == sl.SearchLookupName).Count() > 0)
{

if (pi.Where(p => p.Name == sl.SearchLookupName).First().GetValue(staffmember) == sl.SearchLookupValue)
{
searchedMembers.Add(staffMember);
}
}
}

}

目前没有任何内容添加到新集合 (searchedMembers),即使应该有一些值。

最佳答案

我猜这是因为您使用了 == 来比较您的foundcontrol 值。因为 GetValue 返回 object,所以您正在执行引用相等。

尝试使用 Equals 方法:

if (pi.Where(p => p.Name == sl.SearchLookupName).First().GetValue(staffmember).Equals(sl.SearchLookupValue))

顺便说一句,您可以使用 FirstOrDefault()!= null 检查让您的代码更清晰:

foreach (var sl in searchLookups)
{
var prop = pi.FirstOrDefault(p => p.Name == sl.SearchLookupName);
if(prop != null && prop.GetValue(staffmember).Equals(s1.SearchLookupValue)
{
searchedMembers.Add(staffMember);
}
}

关于c# - 尝试使用反射在集合中查找属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22343782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com