У меня есть приложение С#, и я хочу запустить функцию, которая определена в тексте, чтобы взять один параметр класса A и вернуть double.
Параметром "A" будут некоторые структурированные данные, а функция будет формулой на A.
(Представьте, что A имеет свойства num1, num2 и одна формула, чтобы вернуть среднее значение, другое произвольно для возврата num1 * 2).
Таким образом, я хочу загрузить свое определение функции из текстового источника, скомпилировать их каким-то образом и выполнить их.
В терминах структуры кода я полагаю, что я мог бы ввести тело функции в функцию-член произвольного класса, или если я могу скомпилировать делегат, а затем выполнить его, передав контекст параметра, который также достаточно.
Каким образом это можно сделать?
Я бы предложил использовать синтаксический анализатор выражений, в котором вы можете ввести выражение типа excel и включать все основные функции (статистические, строковые манипуляции, математические/триггеры). Я использовал CalcEngine для аналогичного требования с хорошими результатами. Вы можете расширить его с помощью пользовательских функций.
Другой подход к этому - использовать класс DynamicMethod. Хотя для этого требуется знание IL, чтобы сделать это.
Я бы предположил, что это было бы быстрее, если бы компилировать во время выполнения.
Возможно, вам стоит взглянуть на код С#. Вы можете использовать это для динамической записи и компиляции кода С#, а затем выполнить его.
Остерегайтесь, что это операция с очень высоким риском, поэтому будьте осторожны. Тем не менее его классная функциональность в среде.
Существует документация о том, как скомпилировать код С# здесь.
После того как вы его скомпилировали, вам понадобится использовать отражение для вызова метода (при условии его статического)
Если вы хотите вставить его в существующий класс с помощью LCG, вам нужно будет использовать IL.