我可以通过以下方式获取列表中的值:
使用反射:
foreach (var item in items) {
var property=item.Fields[fieldName].GetType().GetProperty("Id");
var value=property.GetValue(item.Fields[fieldName]);
if (value==searchValue) {
filtered.Add(item);
}
}
使用dynamic关键字:
foreach (var item in items) {
dynamic itemProperty=item.Fields[fieldName];
if (itemProperty.Id==searchValue) {
filtered.Add(item);
}
}
这两个循环的作用相同。它们通过Field[fieldName]筛选IEnumerable(或List),该字段可以是不同类型,但它们都包含名为"Id"的int属性。
我想知道哪一个性能更好。 此外:将其中一个更改为LinQ查询是否会提高性能?
dynamic
也使用反射,但不像你在第一个示例中那样粗糙。因此,我认为在这里使用dynamic
会更快。当然,你也可以自己测量一下。 - Evkinterface IHasId { int Id {get; } }
,并让你的类型实现它(通常只需要在每个类型中添加: IHasId
,因为隐式接口实现)... 然后使用foreach(IHasId item in items) { if (item.Id == searchValue) { ...} }
。 - Marc GravellStopWatch
进行简单的 测量。同时也要注意不要进行过早优化。还可以参考 https://dev59.com/XW445IYBdhLWcg3w5OII。 - MakePeaceGreatAgain