Анализ и выполнение формул с помощью С#

Я ищу библиотеку с открытым исходным кодом для анализа и выполнения формулы/функций в С#.

Я хотел бы создать кучу объектов, которые вытекают из интерфейса (например, IFormulaEntity), который имел бы свойства/методы/значения и позволял бы пользователю указывать формулы для этих объектов.

Например, у меня может быть

public class Employee : IForumulaEntity
{ 
      public double Salary { get; set; }
      public void SendMessage(string message)
}

Затем разрешите пользователю приложения написать что-то вроде:

Employee person = <get from datasource>
if (person.Salary > 1000)
    person.Salary += 1000;

person.SendMessage("Hello");

Это "похоже на С#", но это был бы упрощенный язык программирования. Я знаю, что это много, чтобы спросить. Я бы ожидал, что мои пользователи будут иметь разумные возможности (т.е. Могут писать собственные формулы Excel).

Ответ 1

Посмотрите на функциональность модуля правил, которая является частью Windows Workflow Foundation.

Это не место, о котором можно было бы подумать. Однако, как часть работы, которую они сделали для создания пользовательского интерфейса, который позволяет разработчику Workflow использовать настраиваемые правила и выражения, они придумали способ сделать то же самое в своем собственном приложении, даже если вы не используете Workflow вообще. Их документация включает примеры размещения этой функции в приложении Windows Forms.

Ответ 3

Вы можете использовать cs- script. Это позволяет вам выполнять код С#, который, возможно, больше, чем вы хотите, но почему бы не просто придерживаться С# вместо создания своего собственного синтаксиса С#. Можно интегрировать cs- script в ваше приложение как DLL, и вы можете разрешить ему выполнять код С#, который не является частью класса, чтобы пользователи могли просто написать несколько инструкций, которые им нужны.

Ответ 4

Spring выражения являются очень мощными и меньше всего или ничего, кроме, например, WF

(Механизм основан на ANTLR, а бит выражения, в то время как он тянет в приличную размерную библиотеку lib, не выполняет во всех Spring.NET)

Ответ 5

Пока я избиваю это, Dynamic LINQ воспроизводится в этом пространстве (в частности, синтаксис С#). Очевидно, будьте осторожны, чтобы в вашем контексте поддерживались требования (эмиссия/компиляция кода).