Повышение производительности object.GetType (). GetProperties () и PropertyInfo.GetValue (object) - PullRequest
0 голосов
/ 20 декабря 2018
private int GenerateKey(T requestParams)
{
    foreach (PropertyInfo property in requestParams.GetType().GetProperties())
    {
            var propertyValue = property.GetValue(requestParams);
            // Do stuff with propertyValue
    }
    // ...
}

У меня есть этот фрагмент кода, который перебирает свойства универсального типа и извлекает значение каждого свойства.Я знаю, что Reflection может стать огромным узким местом в производительности и что его можно улучшить с помощью делегатов / DynamicMethod / ILGenerator.Однако это довольно сложно понять.Пример того, как использовать один из этих методов, был бы потрясающим.

1 Ответ

0 голосов
/ 15 июня 2019
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
    }
    // ...
}

Решение с использованием деревьев выражений / делегатов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...