Return 属性 的值基于 属性 名称

Return value of property based on property name

如何在 C# 中根据 属性

的名称构建 属性 的 returns 值的表达式树
Func<Foo, long> getValue(string propertyName)
{
    // i think that the beginning of the expression tree would look like this
    // but i'm not sure this is correct
    var inputParameter = Expression.Parameter(typeof(Foo));
    var desiredProperty = typeof(Foo).GetProperty(propertyName);
    var valueOfProperty = Expression.Property(inputParameter, desiredProperty);
    // ... ???   todo: expression that returns value
}

对该函数的调用如下所示,它是传递给 Linq 的 Select 方法的另一个表达式的一部分:

value = getValue("Bar").Invoke(FooInstance)

应该够了:

var lambda = Expression.Lambda<Func<Foo, long>>(valueOfProperty, inputParameter);
return lambda.Compile();

无论如何 - 当您可以通过反射直接获得价值时,构建 Expression 的目的是什么?

return someFoo => (long)desiredProperty.GetValue(someFoo);