间接代码执行/ C#

背景

我们目前有一个基于Excel的系统来创build声音和照明租赁公司的规格。

其中一部分是excel表格中的一个名为“autospec”的列,它由各个库存项目的Excel公式组成(例如,您指定一个扬声器,然后自动列表中的公式计算您需要的电缆并添加它们自动进入规格。

样品配方

10米麦克风电缆可能有如下公式:

 =IF([loudspeakers]>0,[loudspeakers]*2,0)+([mixing desk]*4) 

我们现在正转向一个C#前端的正确数据库。

我想要的是能够将每个库存项目的autospec公式存储在表格中,并且当用户将一个项目指定为前端时,程序应该find相关的公式,执行它,并适当地改变规格数量。

底线:我需要执行一个string中包含的代码。

我是否以错误的方式去做这件事? 有没有更好的办法?

我曾经问过类似的问题: 如何dynamic地评估C#expression式?

你也许可以用它来评估这些expression式。 这不是一个真正安全的事情要做,除非你能保证没有人会添加垃圾(阅读:邪恶的代码)到你的数据库。

如果您可以将公式分解为“家族”,那么公式列中的每个条目都是具有不同参数的小公式(5-10)组的成员,您可以尝试如下所示:

 [ItemTable]<-[ItemFormulaParameters(param1, param2, param3)]->[FormulaTable(name)] 

并有一个工厂方法来实例化公式对象的名称。 每个这样的公式对象都有一个“calculate(param1,param2,param3)”属性…

要么build立你自己的代码interprenter或build立一个“dynamic规则引擎”,创build一些二进制代表的C#规则,可以执行一个“规则引擎”你必须写。