2015-11-02 64 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