gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:54:56 24 4
gpt4 key购买 nike

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

String str = "12 + 43 * (12 / 2)";
int answer;

answer = str.magic();

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

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

最佳答案

您可以使用 CodeDom 获得“ native ”C# 解析器。(你应该改进错误处理。)

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;
}

关于c# - 如何将我的字符串作为代码执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34758802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com