[英]Evaluate Custom Boolean Expression From String
我有一個來自客戶端的參數字符串。 例如:
string param =“(NAME.FULLNAME AND DOB.OPTIONAL)或(ID AND DOB.REQUIRED)或(ID AND COUNTRY)”
現在,我已經解析了所有傳入的數據,並具有表示每個參數的布爾值。
喜歡 :
bool name_FullName = true;
bool dob_Optional = false;
等等
我正在嘗試找到將客戶參數表達式評估為True或False的最佳方法。
我在想只是用它們的true / false布爾值替換參數。 然后找到任何TRUE AND TRUE
並將其刪除,然后將TRUE AND FALSE
替換為false。 然后評估我剩下的OR
表達式。
鍵入后,這似乎是個好方法。 有人有我想念的更快的解決方案嗎?
另一個選擇是創建一個DataTable
並使用Select
方法。
// create data table
var data = new DataTable();
data.Columns.Add("NAME.FULLNAME", typeof(bool));
data.Columns.Add("DOB.OPTIONAL", typeof(bool));
data.Columns.Add("ID", typeof(bool));
data.Columns.Add("DOB.REQUIRED", typeof(bool));
data.Columns.Add("COUNTRY", typeof(bool));
// fill data table
data.Rows.Add(true, false, true, true, false);
// see if it's a match
var isMatch = data.Select("(NAME.FULLNAME AND DOB.OPTIONAL) OR (ID AND DOB.REQUIRED) OR (ID AND COUNTRY)").Any();
只要括號嵌套始終像您的示例一樣,您提出的解決方案聽起來很容易實現。 但是,如果可以嵌套它們,那么您正在談論制造一個狀態機,或者至少以某種方式實現匹配括號,這是不平凡的。
處理該問題的一種方法是將所有TRUE OR FALSE
替換為TRUE
,然后將所有(TRUE)
替換為TRUE
,這將處理所有情況,但這需要大量替換。 盡管如此,在方案中使用字符串作為狀態占位符似乎還不錯,盡管您可能會考慮通過使用諸如0
和1
以及&
和|
等編碼而不是使用TRUE
和FALSE
來考慮獲得一些小的性能提升|
和和或。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.