簡體   English   中英

從字符串評估自定義布爾表達式

[英]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 ,這將處理所有情況,但這需要大量替換。 盡管如此,在方案中使用字符串作為狀態占位符似乎還不錯,盡管您可能會考慮通過使用諸如01以及&|等編碼而不是使用TRUEFALSE來考慮獲得一些小的性能提升| 和和或。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM