У меня проблемы с производительностью с использованием отражения. 
Поэтому я решил создать делегатов для свойств моих объектов и до сих пор получил это:
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> из-за структуры моего приложения.