首页 > 解决方案 > LINQ 表达式:Nreco 框架给出编译错误

问题描述

这是我第一次使用 nuget,我正在尝试从NRecoFramework编译一个动态 lambda 解析器示例,如下所示:

    var lambdaParser = new NReco.LambdaParser();
    var varContext = new Dictionary<string, object>();
    varContext["one"] = 1M;
    varContext["two"] = "2";

    Console.WriteLine(lambdaParser.Eval("two>one && 0<one ? (1+8)/3+1*two : 0", varContext)); // --> 5`

但是当我尝试编译时,该LamdaParser()方法无法识别。

我已经将 nuget 和 nreco 框架导入到 VisualStudio2017,但它仍然无法编译。

打印我的代码

解决了

我的错,问题是我已经导入了Nreco PackageNreco.LambdaParser Package,因为我无法编译的两个包中的 LamdaParser() 方法都退出了。删除 Nreco.LamdaParser 包后,问题就解决了。

标签: c#linqnugetnreco

解决方案


框架站点上的示例似乎已过时或完全错误。
他们的API 文档是最新的。

LambdaParser是在命名NReco.Linq空间中。您需要将代码更改为:

var lambdaParser = new NReco.Linq.LambdaParser();
var varContext = new Dictionary<string, object>();
varContext["one"] = 1M;
varContext["two"] = "2";

Console.WriteLine(lambdaParser.Eval("two>one && 0<one ? (1+8)/3+1*two : 0", varContext)); // --> 5`

或者,由于您的文件中有using NReco.Linq;声明,您还可以编写:

var lambdaParser = new LambdaParser();
var varContext = new Dictionary<string, object>();
varContext["one"] = 1M;
varContext["two"] = "2";

Console.WriteLine(lambdaParser.Eval("two>one && 0<one ? (1+8)/3+1*two : 0", varContext)); // --> 5`

推荐阅读