単純な式を評価するためにC#式ツリーを構築しています。式の文字列はツリーに解析され、基本演算子(数学的、論理的および関係的)と同様に、括弧を使用して優先順位を尊重します。C#式ツリー - 動的値の参照
bool、string、およびinteger型に加えて、実行時に式の要素のいくつかを評価する必要があります。これらは、例えば、テンプレート文字列で表される。
([firstname] == "bob") && ([surname] == "builder")
上記式はループで、例えば、現在の式呼び出しのコンテキストを提供するオブジェクトの(潜在的に大きな)数について評価されるであろう。テンプレート化されたセクションは現在のコンテキストに反映されます(例:この例では現在のユーザーのファーストネームと姓が解決され、テンプレート化された文字列ではなく式の解像度で使用されます。
解決方法の1つは、構文解析時にテンプレート化された値を解決することです。つまり、定数式の型を使用でき、値の型がわかるようになります。しかし、それぞれの使い方を表現するツリーを再構築して再コンパイルすると、パフォーマンスが悪くなります。呼び出し時にメソッド呼び出しによって
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
私はあなたが何をしようとしているのか、何時に何の情報が知られているのかは本当にはっきりしていません。あなたはすでに物事の解析面を持っていますか?あなたが持っている情報は何ですか?あなたは何を持っていますか?あとで強く型付けされた式ツリーを構築できる中間形式を保存できますか? –