2015-11-02 54 views
-1

如何从Func<T, TResult>获取属性名称?从功能获取属性名称<t, T>

有很多帖子如何获得道具的名字,但是从Expression而不是从Func

_resultViewModel.SelectMeasurement(si => si.Height, vm => vm.HeightImg); // this is usage... I need to get "Height" 

public void SelectMeasurement(Func<ScanInfo, double> measurement, Func<ResultViewModel, ImageSource> image) 
{ 
    //some stuff 
} 
+0

选中此:http://stackoverflow.com/questions/671968/retrieving-property-name-from-lambda-expression –

+0

这是一个闭包,而不是一个属性。 – aevitas

回答

0

不能从Func<T, TResult>得到“属性名称”,因为没有任何“财产”和任何“名称“,当代表被构造时。

此外,代理可以在一些不同的方式获得其返回值,而不是成员访问:

Func<Foo, string> = foo => "bar"; 

这不同于使用表达式(Expression<Func<T, TResult>>)的情况下,因为表达式表示一些代码,其可以被编译进入委托,并可以解析。

+0

好的,谢谢你的回复。如果我使用'Expression >',我如何从表达式获得'Func '? – demo

+0

@demo:你可以编译它:'yourExpressionVar.Compile()'。请注意,它速度很慢,最好考虑缓存结果。 – Dennis