LINQ 表达式:Nreco 框架给出编译错误
LINQ Expressions: the Nreco Framework give compile error
这是我第一次使用 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,但它仍然无法编译。
Print of My Code
已解决
我的错,问题是我导入了两个 Nreco Package and Nreco.LambdaParser Package,因为 LamdaParser() 方法在我无法编译的两个包中都存在。删除 Nreco.LamdaParser 包后问题就解决了。
框架站点上的示例似乎已过时或完全错误。
他们的 API documentation 是最新的。
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`
这是我第一次使用 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,但它仍然无法编译。
Print of My Code
已解决
我的错,问题是我导入了两个 Nreco Package and Nreco.LambdaParser Package,因为 LamdaParser() 方法在我无法编译的两个包中都存在。删除 Nreco.LamdaParser 包后问题就解决了。
框架站点上的示例似乎已过时或完全错误。
他们的 API documentation 是最新的。
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`