我正在構建一個C#表達式樹來評估簡單表達式。表達式字符串被解析爲樹,並且尊重基本的操作符(數學的,邏輯的和關係的),並且通過使用偏差來優先考慮。C#表達式樹 - 動態值查找
除了bool,string和integer類型之外 - 我需要在運行時對錶達式的一些元素進行評估。這些是通過模板串表示,例如:
([firstname] == "bob") && ([surname] == "builder")
以上表達式將用於提供用於當前表達式調用的上下文中,例如,在一個循環的對象的(潛在大)數來評價。模板部分將在當前上下文中反射使用 - 例如,在示例中將解析當前用戶的名字和姓氏,並在表達式解析中使用這些值而不是模板化字符串。
一個解決方案是在解析時解析模板值,這樣可以使用常量表達式類型,並且值的類型將是已知的。但是,重新構建和重新編譯表達式樹每個都會對性能造成影響。
所以,我需要一個表達式類型,其: - 值類型是不是在分析時已知的, - 這是一個方法調用在調用時解析
E.g. Desired example of usage in pseudo code
ExpressionParser parser = new ExpressionParser(); // parses and builds expression trees
MyParsedExpression expression = parser.Parse("([firstname] == 'bob') && ([surname] == 'builder'"); // wrapper for the parsed expression
foreach (Object user in users)
{
expression.Context = user;
Boolean result = expression.EvaluateTruth();
if (result == true)
{
// do something
}
}
感謝, fturtle
爲響應而歡呼。我不確定參數表達式能夠幫助我,因爲表達式可以嵌套,並且可以包含任意數量的模板值。此外,構建表達式樹時不知道類型。總之,我想我是在某種委託表達之後。 – fturtle 2009-08-10 14:01:27
恐怕不是很清楚你想要做什麼,什麼時候知道什麼信息。你有沒有解析事物的一面? *你有什麼信息?你有什麼信息?你能否存儲一些中間形式,讓你稍後建立一個強類型的表達式樹? – 2009-08-10 14:19:41