我正在开发一款Windows Phone 8.1应用程序。我想在运行时执行一个存储在字符串变量中的表达式。例如:
string exp = "4+5-2";
我可以通过以下代码在桌面应用程序中执行此操作:
MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl();
sc.Language = "VBScript";
object result = sc.Eval(expr);
但是这段代码没有在那里工作。它会导致应用程序崩溃。
答案 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
}