当前位置: 首页 > 编程语言 > C#

有没有解析字符串创建C#函数的工具?分享

时间:2023-04-10 23:23:49 C#

是否有解析字符串以创建C#func的工具?我需要知道是否有任何库允许我给定一个表示数学函数的字符串,比如x^2+x+1,(不关心字符串的格式如何,任何对我都适用)生成一个所述函数的C#func的表示。已经使用FLEE(快速轻量级表达式评估器)一段时间了,它运行良好。他们有一个版本保留了Silverlight的大部分功能。它的设计完全符合您的要求等等。http://flee.codeplex.com/Flee是.NETFramework的表达式解析器和求值器。它允许您在运行时评估字符串表达式,例如sqrt(a^2+b^2)。它使用自定义编译器、强类型表达式语言和轻量级代码生成器将表达式直接编译为IL。这意味着表达式评估非常快速和高效。根据您评论中的示例(用记事本编写)计算x^2+x+1:publicFuncCreateExpressionForX(stringexpression){ExpressionContextcontext=newExpressionContext();//定义一些变量context.Variables["x"]=0.0d;//在表达式中使用变量IDynamicExpressione=context.CompileDynamic(expression);FuncexpressionEvaluator=(doubleinput)=>{content.Variables["x"]=input;varresult=(double)e.Evaluate();返回结果;}返回表达式评估器;}Func表达式=CreateExpressionForX("x^2+x+1");双结果1=表达式(1);//3doubleresult2=expression(20.5);//441.75doubleresult3=expression(-10.5);//121.75Funcexpression2=CreateExpressionForX("3*x+10");双结果4=表达式2(1);//13doubleresult5=expression2(20.5);//71.5doubleresult6=expression2(-10.5);//-21.5查看RoslynAPI。它允许您在运行时编译字符串您可以使用CSharpCodeProvider类将代码编译为文件/程序集并动态加载编译后的程序集。此处描述了在程序中使用编译器。这个Stackoverflow问题展示了如何加载已编译的程序集。请记住,您需要将函数包装在类中以便稍后加载和执行它。或者,您可以使用CS-Script来执行脏程序集编译、加载和执行作业。您可以使用CodeDOM动态编译类型,您可以在其中找到用简单代码编写的流畅界面,例如:varcompileUnit=newFluentCodeCompileUnit().Namespace("Sample1").Class("Program").Method(MemberAttributes.Public|MemberAttributes.Static,"Main").Parameter(typeof(string[]),"args").CallStatic(typeof(Console),"WriteLine",Expr.Primitive("HelloFluentCodeDom"))。EndMethod.Method(MemberAttributes.Public|MemberAttributes.Static,"Linq2CodeDomSupport").Parameter(typeof(string[]),"args").Stmt(ExprLinq.Expr(()=>Console.WriteLine("HelloLinq2CodeDOM"))).Declare(typeof(int),"random",ExprLinq.Expr(()=>newRandom().Next(10))).If((intrandom)=>randomConsole.WriteLine("Smalleror等于5."))).Else.Stmt(ExprLinq.Expr(()=>Console.WriteLine("大于5"))).EndIf.EndMethod.EndClass.EndNamespace.EndFluent();Helper.CodeDomHelper.CompileInMemory(compileUnit);assembly.GetType("Sample1.Program").GetMethod("Main").Invoke(null,newobject[]{null});在dePlex上发布了一个更流畅的接口API,当它在RTM中发布时它也会使用看起来不错的Roslyn。当然,也可以通过使用表达式树和从字符串解析为表达式来解决,稍后可以编译(在运行时)并执行。C#学习教程就是这些:是否有用于解析字符串以创建C#func的工具?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: