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#的这个领域不是很了解,不能很容易地阅读源代码。

ScopeCompile期望变量已经存在,而不是否定整个要点

您可以尝试以下操作,

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);