ScopeCompile期望变量已经存在,而不是否定整个要点
本文关键字:是否 变量 期望 存在 ScopeCompile | 更新日期: 2023-09-27 17:49:25
我使用CSharpEval的ScopeCompile功能来允许我在不同的数据上重用编译过的表达式:
var exp = new CompiledExpression<int>("a.Count");
var func = exp.ScopeCompile();
但是我在ScopeCompile
调用中得到这个异常:
我不明白发生了什么事。我链接中的例子允许缓存作用域编译表达式,如果表达式中的变量在编译表达式时已经存在,它有什么用?!类型的异常"ExpressionEvaluator.Parser。ExpressionParseException'发生在ExpressionEvaluator.dll,但未在用户代码中处理
附加信息:无法解析第1行字符0处的符号"a"
文档是相当有限的,我对c#的这个领域不是很了解,不能很容易地阅读源代码。
您可以尝试以下操作,
public class ScopeContext<TArg,TRet>{
public dynamic Scope {get;set;}
public Func<TArg,TRet> Expression;
public ScopeContext(string exp){
TypeRegistry tr = new TypeRegistry();
tr.RegisterSymbole("scope",Scope);
Expression = (new CompiledExpression<TRet>(exp)
{
TypeRegistry = tr
}).ScopeCompile<TArg>();
}
}
// usage
ScopeContext<object,object> f =
new ScopeContext<object,object>("scope.Count");
// you can now change scope dynamically...
f.Scope = new List<int>();
var result = f.Expression(null);