📅  最后修改于: 2023-12-03 14:59:42.703000             🧑  作者: Mango
C# 中的公式通常是在代码中以硬编码的方式定义的,这样可能会造成代码的臃肿和混乱。本文将介绍如何从字符串中动态地创建和解析公式,这样可以更好地管理和维护公式,并且可以使用字符串来扩展现有的公式库。
using Microsoft.CSharp.RuntimeBinder;
string formula = "2 * (x + y)";
dynamic formulaEvaluator = null;
try
{
var c = new CSharpCodeProvider();
var p = new CompilerParameters() { GenerateInMemory = true };
var r = c.CompileAssemblyFromSource(p, string.Format(@"using System;namespace CSCodeEval{{public static class Evaluator{{public static Func<double, double, double> CompileFunc(string formula){{return (x, y) => {{return MathNet.Numerics.Evaluate.Parse(formula).Evaluate(true, x, y);}};}}}}}}}}"));
var t = r.CompiledAssembly.GetType("CSCodeEval.Evaluator");
var m = t.GetMethod("CompileFunc");
formulaEvaluator = m.Invoke(null, new object[] { formula });
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
double x = 3;
double y = 4;
double result = formulaEvaluator(x, y);
Console.WriteLine("Result: " + result);
本文介绍了如何从字符串中动态地创建和解析公式。使用本方法可以更好地管理和维护公式,并且可以使用字符串来扩展现有的公式库。