2013-04-18 90 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

马特是这个东西的人。 –