我已經編寫了下面的代碼來評估布爾表達式。表達式以對象的形式進行編碼。在C中評估布爾表達式
這是我查看代碼並思考的那些時刻之一:我確信有更好的代碼編寫方式,使用較少的布爾變量但看不到正確的路。任何幫助?單元測試已經寫好,並且正在通過各種輸入。
if (tree == null || !tree.IsActive || tree.FilterNodes == null)
{
return false;
}
var result = false;
foreach (var filter in tree.FilterNodes.Where(a => a.IsActive && a.ConditionNodes != null))
{
var tempBool = false;
foreach (var condition in filter.ConditionNodes.Where(a => a.IsActive))
{
if (!string.IsNullOrWhiteSpace(condition.FieldName) && values.ContainsKey(condition.FieldName))
{
var value = values[condition.FieldName];
if (filter.LogicalOperator == LogicalOperator.Or && ApplyCondition(condition.ConditionOperator, value, condition.FieldValue))
{
tempBool = true;
break;
}
else if (filter.LogicalOperator == LogicalOperator.And)
{
tempBool = ApplyCondition(condition.ConditionOperator, value, condition.FieldValue);
if (!tempBool)
{
break;
}
}
else
{
tempBool = false;
}
}
else if (!string.IsNullOrWhiteSpace(condition.FieldName) && filter.LogicalOperator == LogicalOperator.And)
{
tempBool = false;
}
}
result = tempBool;
if (!result)
{
break;
}
}
return result;
謝謝,但即使這種改變仍然感覺複雜 –
tempbool在循環之前設置爲false。值改變的唯一時間就是跳出循環。所以在循環開始時不需要將它重置爲false。 – waltsj19
看到我的編輯更簡單的解決方案 –