【发布时间】:2013-07-30 05:14:36
【问题描述】:
我有一串来自客户端的参数。一个例子可能是:
string param = "(NAME.FULLNAME AND DOB.OPTIONAL) OR (ID AND DOB.REQUIRED) OR (ID AND COUNTRY)"
现在,我已经解析出所有传入的数据,并用布尔值表示每个参数。
喜欢:
bool name_FullName = true;
bool dob_Optional = false;
等等
我正在尝试找到将客户参数表达式评估为 True 或 False 的最佳方法。
我想只是用它们的真/假布尔值替换参数。然后找到任何TRUE AND TRUE 并删除它们,并将TRUE AND FALSE 替换为false。然后评估我留下的OR 表达式。
输入后,这似乎是一个不错的方法。有没有人有我想念的更快的解决方案?
【问题讨论】:
-
确保你也抓住了括号 - 除非它总是 (AND..AND..AND)OR(AND..AND...)OR...
-
您是否考虑过在 codeplex 上使用其中一种布尔解析器? stackoverflow.com/q/5029699/2270839
-
关于解决方案需要注意的几点:1) 确保考虑布尔优先级顺序,但只要您正确处理括号,这可能不会成为问题,2) 它听起来您不会实现短路,这可能是一件好事,3)如果您的兴趣是代码的清晰度,这可能很好;但是,如果您有兴趣提高它的速度(和功能),您可能需要研究 Tokenization。使用非常小的潜在参数集,只需使用令牌 id 数组就可以非常容易。
标签: c# boolean-expression