将List <string>评估为数学表达式</string>

时间:2011-08-16 17:32:58

标签: c# expression-evaluation

我有List<String>,其中包含值和运算符。

["123", "+", "(", "890", "-", "15.00", ")"]

我知道我可以制作一个算法,将这些数字和操作符推送到堆栈上然后将其弹出并进行评估。但是,如果不使用外部库,还有更好的方法吗?

4 个答案:

答案 0 :(得分:4)

将数字和运算符推送到堆栈上将是一个解释器。

明显更好的方法(对于“更好”的定义)是编写编译器!

您已经将输入拆分为词法标记,因此您可以跳过实施词法分析器并可以直接构建AST。您可以在System.​Linq.​Expressions Namespace中找到合适的类来转换您的输入;看看Expression Class。您可以将结果包装在lambda表达式中,将其编译为IL并在CLR上执行它!

答案 1 :(得分:2)

您可以加入List,然后让编译器在运行时对其进行评估,如Mehrdad所述。

Expression e = new Expression("5 * 2"); 
e.Evaluate();

我发现了一个非常类似的问题here

更新:

NCalc“NCalc - .NET的数学表达式评估器”即使这是一个外部库,我认为它是一个开源项目,这意味着你可以直接将代码添加到你的项目中。

更新:

您可以使用String.Join功能加入列表。

string formula = String.Join("",listMathOperators);

答案 2 :(得分:0)

您始终可以使用.NET框架中的C#编译器类将其评估为C#表达式...

答案 3 :(得分:0)

我有一个完整的类来计算任何表达式。

首先,您需要将列表的所有字符串提取为单个字符串,例如:

string sExpression = "123+(890-15.00)";

其次,你需要在解析器中评估这个表达式,我有一个完整的类为你做这个,但我不能在这里附加文件。