Оценивать реляционный оператор из строки
У меня есть реляционные выражения, хранящиеся в базе данных, которые у меня есть в виде строк в приложении для 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());
}
Читайте также о других библиотеках, которые вы можете использовать для решения таких проблем.