У меня проблемы с производительностью с использованием отражения.
Поэтому я решил создать делегатов для свойств моих объектов и до сих пор получил это:
TestClass cwp = new TestClass();
var propertyInt = typeof(TestClass).GetProperties().Single(obj => obj.Name == "AnyValue");
var access = BuildGetAccessor(propertyInt.GetGetMethod());
var result = access(cwp);
static Func<object, object> BuildGetAccessor(MethodInfo method)
{
var obj = Expression.Parameter(typeof(object), "o");
Expression<Func<object, object>> expr =
Expression.Lambda<Func<object, object>>(
Expression.Convert(
Expression.Call(
Expression.Convert(obj, method.DeclaringType),
method),
typeof(object)),
obj);
return expr.Compile();
}
Результаты были весьма удовлетворительными, примерно в 30-40 раз быстрее, чем при использовании обычного метода (PropertyInfo.GetValue (obj, null);
)
Проблема: Как я могу создать свойство SetValue
свойства, которое работает одинаково? К сожалению, не получилось.
Я делаю это, потому что я не могу использовать методы с <T>
из-за структуры моего приложения.