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

时间:2015-04-17 19:08:38

标签: c# windows-phone-8.1

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

           string exp = "4+5-2";

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

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

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

2 个答案:

答案 0 :(得分:1)

如果您不想使用重复问题或评论中建议的任何软件包,并且真的只想推送自己的解析器,那么Shunting-yard algorithm就像任何一样好。从维基百科中获取伪代码并在C#中实现它。

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

答案 1 :(得分:1)

您可以使用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上查看此Github及其存储库。