使用C#解析和执行公式。

12
我正在寻找一个开源库,用于在C#中解析和执行公式/函数。我想创建一堆从接口(即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");

这段代码“看起来像是C#”,但它将是一种简化的编程语言。我知道我的用户应该是相当有能力的(即能够编写自己的Excel公式)。


为什么我在主页上看到“删除我的账户”这个问题? - Karel Bílek
凭借超过5000的声望和2个金徽章,你应该真的比试图清除你的问题内容更好地了解情况。你知道吗,你可以为它们标记管理员的注意力吗?只要说你想删除你的账户。他们会为您处理其余事项。只是编辑那个信息并不能让管理员注意到你。 - BoltClock
5个回答

6

6

了解Windows Workflow Foundation中的规则引擎功能。

这不是一个人们会想到去寻找的地方。但是,作为为工作流开发人员提供可配置规则和表达式使用的UI的一部分,他们已经想出了一种方法,在您自己的应用程序中执行相同的操作,即使您根本没有使用工作流。他们的文档包括在Windows Forms应用程序中托管此功能的示例。


+1。是的,这正是我要找的东西[http://msdn.microsoft.com/en-us/library/aa480193.aspx],只不过我想让用户编写规则。 - Dead account
这就是我的意思 - 它确实允许用户编写规则。您可以在自己的应用程序中托管规则设计器,用户可以编写规则。然后,您可以在运行时将用户编写的规则定义应用于数据。 - John Saunders
像往常一样,微软提供了工具。这就是我喜欢他们的原因 :) - user47322
使用V3时要非常小心,因为V4基本上是一次重写(请听最近的Brian Noyes DNR以获取良好的低调)。如果正在寻找一本书,Essential WF书还不错,但基于V3。 - Ruben Bartelink
真的,但你是否知道规则引擎发生了哪些变化? - John Saunders

1
你可以使用cs-script。这样可以让你执行C#代码,也许比你想要的更多,但为什么不坚持使用C#而不是创建自己的类似C#的语法呢?可以将cs-script集成到你的应用程序中作为DLL,并允许它执行不属于类的C#代码,以便用户只需编写他们需要的几个语句即可。

0

Spring表达式非常强大,而且不像WF那样全是或者全不是。

(该引擎基于ANTLR,并且表达式部分虽然引入了一个相当大的库,但并没有拉入所有的Spring.NET)


是的,我以我的回答及时性为荣! - Ruben Bartelink
啊!跟踪者!我最终自己编写了代码,因为需求相当具体。请访问www.twipler.com/experiment。 - Dead account
认罪吧!是的,那看起来离 WF 还有很长的路要走! - Ruben Bartelink

0

在我不断强调的同时,Dynamic LINQ 在这个领域中扮演着重要角色(特别是 C# 风格的语法)。显然,要小心它的要求(代码的发射/编译)是否得到您的上下文支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接