Отражение здесь не совсем работает, потому что у вас есть особый случай - ID
.Если c.Caption
равно ID
, вы бы позвонили int.Parse
перед сравнением.Это делает непосредственное использование отражения довольно трудным.
Если этот особый случай не существует, и у вас есть только string
свойства для сравнения, то вы можете сделать это:
foreach(string word in words)
{
var propertyInfo = object.GetType().GetProperty(word);
FilteredList.AddRange(BaseList.FindAll(x => propertyInfo.GetValue(x) == word));
}
Для обработкиВ особом случае вы можете создать метод, который сравнивает два произвольно типизированных объекта:
public bool CustomEquals(object o1, object o2) {
if (o1 is int && o2 is string) {
return o1 == int.Parse((string)o2);
}
// handle other special cases here...
return o1 == o2;
}
// usage:
FilteredList.AddRange(BaseList.FindAll(x => CustomEquals(propertyInfo.GetValue(x), word)));