我被困在表达树的土地上。我有一个表达式调用.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);
抛出错误:
对象引用未设置为对象的实例
任何帮助人员都会非常感激。