給予類似的表達:你怎麼知道變量/財產何時關閉?
Int32 five = 5;
Express(num => num == five);
其中Express
是一樣的東西
void Express(Expression<Predicate<Int32>> predicatesGonnaPredicate)
{
....
}
當解析上面的表情,我將如何確定編程五個已經關閉了嗎?我可以想到大量的黑客方式來做到這一點,但是必須有一些適當的手段來識別它?
給予類似的表達:你怎麼知道變量/財產何時關閉?
Int32 five = 5;
Express(num => num == five);
其中Express
是一樣的東西
void Express(Expression<Predicate<Int32>> predicatesGonnaPredicate)
{
....
}
當解析上面的表情,我將如何確定編程五個已經關閉了嗎?我可以想到大量的黑客方式來做到這一點,但是必須有一些適當的手段來識別它?
如果要替換所有不依賴於lambda參數的子表達式及其值,可以使用Matt Warren的文章Building an IQueryable Provider - Part III中的PartialEval
。
例如,在你的情況下,結果將是一個表達式num => num == 5
。
你知道嗎,我只是想通了。你可以評估任何不包含參數的東西,所以我只需要驗證沒有參數,如果沒有,我可以在本地評估。感謝你的回答! – sircodesalot
馬特是這個東西的人。 –
我不能讓這個代碼的正面或反面。什麼是'五',爲什麼lambda中沒有使用'number'? –
另外:值首先不會被關閉。 **外部變量**被關閉。 (請注意,如果代碼在類中,那麼「this」會被視爲外部變量,即使它不是變量。) –
對不起,錯字。固定。 – sircodesalot