间接代码执行/ 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#规则,可以执行一个“规则引擎”你必须写。