Jon Skeet 的回答是绝对正确的(他还有其他类型的吗?)如果您需要动态访问 1000 个 InventoryItem 对象,则效果很好。但是,如果您需要动态访问更多对象,例如 1000 万个对象,反射开始变得非常缓慢。我有一个我不久前制作的小助手类,通过创建和编译访问属性的动态方法,可以轻松地访问比反射快约 26 倍的属性(至少在我的计算机上)。它远不及静态访问它的速度,但由于您需要动态访问它,因此甚至不需要考虑。以下是你如何使用它:
var accessor = new DynamicPropertyAccessor(typeof(InventoryItem).GetProperty("ItemCode"));
foreach (var inventoryItem in warehouse13)
{
Console.WriteLine("{0}: {1}", accessor.Name, accessor[inventoryItem]);
}
您还可以使用它来设置一个值:accessor[item] = "newValue"
。如果您需要动态访问多个属性,您可以拥有一组访问器。当您为DynamicPropertyAccessor
每个属性创建一次并重用以访问多个对象(或多次访问同一个对象)时,性能提升将是巨大的。
我在DynamicPropertyAccessor
这里发布了课程:https ://gist.github.com/3059427