执行存储在字符串中的表达式
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
}
我正在开发 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
}