Как разобрать строковое выражение с побитовыми операторами, используя пакет Nreco LambdaParser? - PullRequest
0 голосов
/ 28 августа 2018

У меня есть следующий код, но он не компилируется, я пытался найти что-нибудь о побитовых операторах при использовании пакета лямбда-анализатора Nreco, но я не нашел пример.

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

1 Ответ

0 голосов
/ 31 августа 2018

NReco.LambdaParser не поддерживает побитовые операции И / ИЛИ (оба слова "&&" / "и" означают логическое И). Однако вы можете добавить в 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 для функций, которые вам нужны в выражениях.

...