0
private int GenerateKey(T requestParams)
{
    foreach (PropertyInfo property in requestParams.GetType().GetProperties())
    {
            var propertyValue = property.GetValue(requestParams);
            // Do stuff with propertyValue
    }
    // ...
}

我有这个代码片段,它遍历泛型类型属性并提取每个属性的值。我知道反射可能是一个巨大的性能瓶颈,并且可以使用委托/DynamicMethod/ILGenerator 对其进行改进。然而,掌握这些是相当困难的。关于如何使用其中一种方法的示例将非常棒。

4

1 回答 1

0
private PropertyInfo[] Properties { get; }
private Func<T, PropertyInfo, object> ExecutableGetter { get; }

public Constructor()
{
      Properties = typeof(T).GetProperties();
      Expression<Func<T, PropertyInfo, object>> getter = (tParams, property) => property.GetValue(tParams);
      ExecutableGetter = getter.Compile();
}

private int GenerateKey(T requestParams)
{
    foreach (PropertyInfo property in Properties)
    {
            var propertyValue = ExecutableGetter(requestParams, property);
            // Do stuff with propertyValue
    }
    // ...
}

使用表达式树/委托的解决方案

于 2019-06-14T21:17:03.120 回答