Я пытаюсь использовать дерево выражений и объекты выражения Lamdba в .Net 3.5, чтобы позволить мне динамически вычислять логическое выражение, введенное пользователем.
Пока что пользователь может создать дерево выражений, состоящее из BinarayExpressions
, где значения И и ИЛИ выражены как ParameterExpressions
. Затем я планировал создать LambdaExpression
на основе этого дерева, чтобы я мог скомпилировать выражение в делегат, который я мог бы затем вызвать. Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, сколько входных параметров потребуется пользователю, поэтому, когда я приду к компиляции выражения в делегат, я не знаю, каким методом должна быть сигнатура метода до времени выполнения.
Пока я придумал два возможных решения.
- Создайте целую кучу делегатов, таких как
Func<bool, bool, bool...>
, которые могут принимать столько параметров, сколько, я думаю, может понадобиться пользователю. Это не кажется самым элегантным решением, но я думаю, что оно сработает, пока кто-нибудь не захочет использовать еще один параметр, чем я предусмотрел. - Передайте массив значений и каким-то образом назначьте их моим параметрам с помощью индексатора массива. Я думал об этом, но не могу понять, как это работает.
NB: Это должно быть быстро, поэтому никакого бокса или чего-то подобного.