Оценивать реляционный оператор из строки

У меня есть реляционные выражения, хранящиеся в базе данных, которые у меня есть в виде строк в приложении для iOS. Я хотел бы оценить условия в строках в C#, аналогично логике в следующем псевдокоде:

string str1= "x > 0";
string str2= "y < 1";

int x = 1;
int y=0;

if(str1 && str2)
{
        //do stuff
}

2 ответа

Решение

Если выражения простые, как в примере, вы можете просто их проанализировать. Но если вы имеете в виду более сложные выражения, я рекомендую взглянуть на деревья выражений C#. Документация хорошо объясняет это.

Гораздо более простым способом было бы использовать библиотеку, например: https://github.com/davideicardi/DynamicExpresso

Используйте библиотеку выражений Afk ( ссылка Afk) и попробуйте следующий код, это решит вашу проблему, как я уже разобрался.

Обязательное NameSpace

using Afk.Expression;

Ваш код для отправки выражения в виде строки в оценщик библиотеки

string str1 = "x > 0";
    string str2 = "y < 1";

    int x = 10;
    int y = 0;
    var st1=str1.Replace("x",x.ToString());
    var st2 = str2.Replace("y", y.ToString());
    if (Eval(st2) && Eval(st1))
    {
         //checked
    }

Метод Эвала оценивает математическое и условное выражение

bool Eval(string st)
{
    ExpressionEval eval = new ExpressionEval(st);
    return Convert.ToBoolean(eval.Evaluate().ToString());
}

Читайте также о других библиотеках, которые вы можете использовать для решения таких проблем.

Другие вопросы по тегам