1

我有以下代码,但它无法编译,我尝试在使用 Nreco lambda 解析器包时找到有关按位运算符的任何信息,但我没有找到示例。

    var lambdaParser = new NReco.Linq.LambdaParser();
    var varContext = new Dictionary<string, object>();

    varContext["numA"] = 3;

    var varResult = lambdaParser.Eval("(numA & 1) == 1 ? true : false", varContext);
    Console.WriteLine(varResult);
4

1 回答 1

1

NReco.LambdaParser 不支持按位 AND/OR 操作(“&&”/“and”都表示布尔 AND)。但是,您可以将您的辅助函数添加到 varContext 以达到您的目的:

varContext["BitAnd"] = (Func<int, int, int>)((a, b) => v & b);
var varResult = lambdaParser.Eval("BitAnd(numA, 1) == 1 ? true : false", varContext);

甚至

varContext["CheckBit"] = (Func<int, int, bool>)((a, b) => (v & b) == b);
var varResult = lambdaParser.Eval("CheckBit(numA, 1) ? true : false", varContext);

这种方法允许您为表达式中需要的函数扩展 LambdaParser。

于 2018-08-31T16:50:25.723 回答