簡體   English   中英

用字符串取冪計算算術表達式

[英]Evaluating arithmetic expression with exponentiation from string

我需要用來自字符串的冪來評估算術表達式,例如:

string expression = "4*5+2^3"

^符號可以更改為任何其他符號或字符串,但是必須以與+-*操作相同的方式編寫,因為數字和運算符在某種程度上是隨機生成的。 有辦法嗎? 我不確定您是否可以在NCalc或Jace.Net中以這種方式編寫冪運算

您可以如下編寫Evaluator類來動態執行C#代碼:

public class Evaluator
{
    public int Evaluate(string expression)
    {
        CSharpCodeProvider codeProvider = new CSharpCodeProvider();
        CompilerParameters compilerParameters = new CompilerParameters();
        compilerParameters.ReferencedAssemblies.Add("system.dll");
        compilerParameters.CompilerOptions = "/t:library";
        compilerParameters.GenerateInMemory = true;

        StringBuilder typeDefinition = new StringBuilder("");
        typeDefinition.AppendLine("using System;");
        typeDefinition.AppendLine("namespace Evaluator");
        typeDefinition.AppendLine("{");
        typeDefinition.AppendLine("    public class Evaluator");
        typeDefinition.AppendLine("    {");
        typeDefinition.AppendLine("        public object Evaluate()");
        typeDefinition.AppendLine("        {");
        typeDefinition.AppendLine("            return " + expression + ";");
        typeDefinition.AppendLine("        }");
        typeDefinition.AppendLine("    }");
        typeDefinition.AppendLine("}");

        CompilerResults compilerResult = codeProvider.CompileAssemblyFromSource(compilerParameters, typeDefinition.ToString());

        System.Reflection.Assembly a = compilerResult.CompiledAssembly;
        object o = a.CreateInstance("Evaluator.Evaluator");
        Type dynamicEvaluatorType = o.GetType();
        MethodInfo dynamicEvaluateMethod = dynamicEvaluatorType.GetMethod("Evaluate");
        return (int) dynamicEvaluateMethod.Invoke(o, null);
    }
}

然后,您可以像這樣使用它:

        string expression = "4*5+2";
        int result = new Evaluator().Evaluate(expression);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM