给予类似的表达:你怎么知道变量/财产何时关闭?
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