2014-11-13 5 views
0

Мне интересно, существует ли гибкий и эффективный способ обмена переменными между несколькими скомпилированными деревьями выражений?Обмен переменными между деревьями выражений

Я пишу парсер выражений. На данный момент я могу выполнять однострочные операторы. Используя Expression.Block, можно построить произвольные деревья больших выражений с несколькими переменными. Тем не менее, они становятся очень трудными для отладки, поскольку у вас нет контроля над тем, что происходит внутри скомпилированной лямбда (например, нет возможности установить точки останова или часы). Поэтому я хотел бы разделить это дерево одного выражения на несколько, все из которых работают на одних и тех же переменных (переданных в качестве параметра лямбда).

Простейшее решение, о котором я могу думать, это использовать массив объектов в качестве параметра для перехода в лямбда. Однако в этом случае я должен преобразовывать/box/unbox значения каждый раз, когда я обращаюсь к ним. Есть ли способ имитировать «стек вызовов», где переменные напрямую выровнены как их собственное представление в памяти?

ответ

2

Вы должны создать свой собственный класс (используя TypeBuilder) с полем для каждого члена, которого хотите.

+0

Я немного поиграл с TypeBuilder и думаю, что это будет путь. Благодаря! – LionAM