执行存储在字符串中的表达式

Execute Expression Stored in a String

我正在开发 windows phone 8.1 的应用程序。我想在 运行 时间执行一个存储在字符串变量中的表达式。例如:

string exp = "4+5-2";

我可以通过以下代码在桌面应用程序中执行此操作:

MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl();
sc.Language = "VBScript";
object result = sc.Eval(expr);

但是这段代码在那里不起作用。它会导致应用程序崩溃。

如果您不想使用重复问题或评论中建议的任何包,而只想使用您自己的解析器,那么 Shunting-yard algorithm 和其他包一样好。从 Wikipedia 中获取伪代码并在 C# 中实现它。

作为奖励,如果您真的需要它,您可以添加一些逻辑来超越该算法的基本算术运算(例如,支持按名称调用函数)。

您可以使用 Jace.NET(只是另一个计算引擎)nuget 包。支持WP8.1:

 private CalculationEngine engine = new CalculationEngine();

 private void ExecuteButton_Click(object sender, RoutedEventArgs e)
 {
    double result = engine.Calculate(ExpressionTextBox.Text);
    ExpressionTextBox.Text = result.ToString();  // displays the result
 }

有关详细信息,请查看此 link and its repository on Github