表达式树帮助,嵌套块

时间:2014-07-28 23:38:29

标签: c# expression-trees

我被困在表达树的土地上。我有一个表达式调用.Any()方法返回一个布尔值。根据.Any()的值,我想将局部变量设置为某个值。然后我想在其他条件调用中设置相同的局部变量..

var anyExpression = ...;
Expression.Block(new [] {myLocalVarClass, Param}, 
Expression.Assign(mylocalVarClass, ..), 
Expression.Assign(Param, ...) 
Expression.Condition(anyExpression, 
Expression.Block(...set myLocalVarClass because any is true,  Expression.Constant(true)), 
Expression.Block(...set myLocalVarClass because any is false, Expression.Constant(false)));

在条件的ifTrue部分我设置myLocalVarClass成员,并作为ifTrue块的最后一个表达式,我将它设置为Expression.Constant(true))

我想把包含条件的块,AND_ALSO它带到同一结构的另一个块。这些块应该使用相同的myLocalVarClass(设置各种类成员)以及传递给已编译的lambda的参数(这是一种类)。最终的返回类型不是bool它应该是myLocalVarClass。

在我和块一起进入finalJoinedExpression之后我试试这个

var finalBlk = Expression.Block(new[] { myLocalVarClass, Param}, Expression.Assign(myLocalVarClass, ...),
Expression.Assign(Param, ...),
finalJoinedExpression, returnExpression, returnLabel);

// returnExpression, returnLabel correctly point to myLocalVarClass to return.

this.doesntWork =
              Expression.Lambda<Func<T, myLocalVarClass>>(finalBlk, param).Compile();

this.doesntWork(paramClassObj);

抛出错误:

  

对象引用未设置为对象的实例

任何帮助人员都会非常感激。

0 个答案:

没有答案