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);
如何在 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);