间接代码执行/ C#

时间:2011-01-26 14:26:52

标签: c# winforms excel

背景

我们目前有一个基于Excel的系统,用于为声音和照明租赁公司制定规范。

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

样本公式

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

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

我们现在正转移到一个带有C#前端的合适数据库。

问题

我想要的是能够在表格中存储每个库存项目的autospec公式,当用户指定项目的前端时,程序应该找到相关的公式,执行它,并根据需要更改规格数量。

底线:我需要执行字符串中包含的代码。

我是以错误的方式来做这件事的吗? 还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

我问过一次类似的问题:How can I evaluate a C# expression dynamically?

您可以使用它来评估这些表达式。这不是一件非常安全的事情,除非你能保证没有人会在你的数据库中添加垃圾(阅读:恶意代码)。

如果你可以将公式分解为“族”,那么公式列中的每个条目都是一组只有不同参数的小(5-10)公式的成员,你可以尝试这样的事情: / p>

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

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

答案 1 :(得分:0)

构建您自己的代码interprenter或构建一个'动态规则引擎',创建一些c#规则的二进制表示,可以由您必须编写的“规则引擎”执行。