2014-03-12 52 views
2

希望得到一點幫助。我傳遞一個集合...例如包含一個屬性名稱和值的實例。試圖使用反射在集合中查找屬性值

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

現在我想在不同的集合,以檢查是否相同相同的屬性名稱存在,如果是這樣我想這些值添加到同一類型的集合。

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

} 

因爲它目前沒有任何內容添加到新集合(SearchingMembers),即使應該有一些值。

回答

2

我想這是因爲你用==來比較你發現控制值。並且因爲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); 
    } 
} 
+0

大...感謝配發! – Arianule