Разобрать условие, записанное в коде строки в C #, и выполнить то же самое - PullRequest
0 голосов
/ 23 января 2012

Пример:

Условие:

ЕСЛИ A> B THEN

ПЕЧАТЬ Б

ELSE

ПЕЧАТЬ A

Это условие записывается в виде строки в столбце таблицы в SQL.

Я хочу получить это условие из таблицы и преобразовать это условие в код C # как

Если (A> B)

{

печать B ...........

}

еще

{

печать A ...........

}

где A и B - динамические значения, переданные из решения Предположим, что А = 10 и В = 20 то

выполнить код, который вернет 10 или 20 при условии.

Ответы [ 3 ]

0 голосов
/ 23 января 2012

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

0 голосов
/ 23 января 2012

Здесь есть ответ на SO, который объясняет, как повторно использовать DLL движка Javascript, поставляемую с каждой установкой Windows: анализ и выполнение JS с помощью C # .

У него есть пример сфункция, которую вы можете адаптировать к вашим потребностям.

0 голосов
/ 23 января 2012

Это зависит от того, что вы хотите с этим сделать, но один из возможных способов решить эту проблему - использовать сборку Microsoft.JScript.Хотя JScript немного отличается от C #, большая часть синтаксиса одинакова или похожа.Более того, JScript основан на глобальной области видимости, поэтому не нужно также оборачивать код, сгенерированный в методе.

При выполнении шагов вы должны сделать следующее:

  • изменитькод, полученный из базы данных, чтобы быть действительным JScript (с использованием строковых методов и, возможно, большого количества Regex)
  • Получить экземпляр компилятора JScript
  • Скомпилировать код в сборку
  • Запустите сборку с некоторыми входными данными.

Но так как это довольно тяжело при создании типов / сборок (которые не могут быть выгружены), я бы рекомендовал (используя описанный выше метод) скомпилироватьпростая оболочка для функции jscript eval () и просто предоставление вашего jscript для этого кода.Тогда вам не придется беспокоиться о компиляции и т. Д.

Будьте осторожны при создании динамического кода.Вся платформа .Net будет доступна для использования, поэтому, если вы не будете полностью доверять источнику условий или не ограничите скомпилированную сборку, может произойти неприятный материал.

...