2013-04-18 36 views
0

給予類似的表達:你怎麼知道變量/財產何時關閉?

Int32 five = 5; 

Express(num => num == five); 

其中Express是一樣的東西

void Express(Expression<Predicate<Int32>> predicatesGonnaPredicate) 
{ 
    .... 
} 

當解析上面的表情,我將如何確定編程五個已經關閉了嗎?我可以想到大量的黑客方式來做到這一點,但是必須有一些適當的手段來識別它?

+0

我不能讓這個代碼的正面或反面。什麼是'五',爲什麼lambda中沒有使用'number'? –

+0

另外:值首先不會被關閉。 **外部變量**被關閉。 (請注意,如果代碼在類中,那麼「this」會被視爲外部變量,即使它不是變量。) –

+0

對不起,錯字。固定。 – sircodesalot

回答

1

如果要替換所有不依賴於lambda參數的子表達式及其值,可以使用Matt Warren的文章Building an IQueryable Provider - Part III中的PartialEval

例如,在你的情況下,結果將是一個表達式num => num == 5

+0

你知道嗎,我只是想通了。你可以評估任何不包含參數的東西,所以我只需要驗證沒有參數,如果沒有,我可以在本地評估。感謝你的回答! – sircodesalot

+0

馬特是這個東西的人。 –