У меня есть строка параметров, которые поступают от клиента. Примером может быть:Оценить пользовательское булевское выражение из строки
строка парам = "(NAME.FULLNAME И DOB.OPTIONAL) ИЛИ (ID И DOB.REQUIRED) ИЛИ (ID и название страны)"
Теперь, я разобран из всех входящих данных и имеют boolean, представляющие каждый параметр.
Как:
bool name_FullName = true;
bool dob_Optional = false;
т.д.
Я пытаюсь найти лучший способ оценить выражение параметра клиента к истинным или ложным.
Я думаю, что просто замените параметры их истинными/ложными ошибками. Затем найдите все TRUE AND TRUE
и удалите их и замените TRUE AND FALSE
на false. Затем оцените выражение OR
, которое у меня осталось.
После ввода текста это выглядит как хороший способ. У кого-нибудь есть более быстрые решения, которые мне не хватает?
Убедитесь, что вы ловите скобку, тоже - если это не всегда (AND..AND..AND) ИЛИ (AND..AND ...) ИЛИ ... –
Вы смотрели на использование одного из boolean parsers на codeplex? http://stackoverflow.com/q/5029699/2270839 – Kevin
Несколько вещей, чтобы отметить о решениях: 1) Не забудьте принять во внимание булевский порядок приоритета, но до тех пор, пока вы имеете дело с скобками правильно, что, вероятно, не будет проблема, 2) Похоже, вы не собираетесь внедрять короткое замыкание, и это, наверное, хорошо, 3) если ваш интерес заключается в ясности вашего кода, это, вероятно, хорошо; если вы заинтересованы в повышении скорости (и возможностей) этого, вы можете захотеть взглянуть на токенизацию. С очень небольшим набором потенциальных аргументов было бы очень просто использовать массив идентификаторов токенов. – TASagent