如何将我的字符串作为代码执行

我正在制作一个计算器。 我知道如何编写逻辑,但我很好奇是否可以按照我要解释的方式完成。

String str = "12 + 43 * (12 / 2)"; int answer; answer = str.magic(); //str.magic is the same as answer = 12 + 43 * (12 / 2); 

现在我想要的是如何将str转换为可执行代码。

您可以使用CodeDom来获取“本机”C#解析器。 (您应该改进error handling。)

 using System.CodeDom.Compiler; using Microsoft.CSharp; using System.Reflection; ... static void Main() { double? result = Calculate("12 + 43 * (12 / 2)"); } static double? Calculate(string formula) { double result; try { CompilerParameters compilerParameters = new CompilerParameters { GenerateInMemory = true, TreatWarningsAsErrors = false, GenerateExecutable = false, }; string[] referencedAssemblies = { "System.dll" }; compilerParameters.ReferencedAssemblies.AddRange(referencedAssemblies); const string codeTemplate = "using System;public class Dynamic {{static public double Calculate(){{return {0};}}}}"; string code = string.Format(codeTemplate, formula); CSharpCodeProvider provider = new CSharpCodeProvider(); CompilerResults compilerResults = provider.CompileAssemblyFromSource(compilerParameters, new string[]{code}); if (compilerResults.Errors.HasErrors) throw new Exception(); Module module = compilerResults.CompiledAssembly.GetModules()[0]; Type type = module.GetType("Dynamic"); MethodInfo method = type.GetMethod("Calculate"); result = (double)(method.Invoke(null, null)); } catch (Exception) { return null; } return result; } 

您可以简单地使用NCalc库点击此处获取更多信息。 你可以从这里下载该DLL文件

例:

 NCalc.Expression exp= new NCalc.Expression("(12*3)-29"); object obj = exp.Evaluate(); MessageBox.Show(obj.ToString());