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

C#中有eval函数吗?分享

时间:2023-04-10 21:52:11 C#

C#中有eval函数吗?我在文本框中输入方程式,它会生成给定抛物线的图形。是否可以使用评估功能?我的C#2010没有microsoft.jscript。C#没有类似的Eval函数,但创建一个非常简单:publicstaticdoubleEvaluate(stringexpression){System.Data.DataTabletable=newSystem.Data.DataTable();table.Columns.Add("表达式",string.Empty.GetType(),表达式);System.Data.DataRowrow=table.NewRow();table.Rows.Add(行);returndouble.Parse((string)row["expression"]);现在只需调用它:Console.WriteLine(Evaluate("9+5"));您可以使用DataTable类的“Compute”方法轻松完成此操作。staticDoubleEval(Stringexpression){System.Data.DataTable表=newSystem.Data.DataTable();返回Convert.ToDouble(table.Compute(expression,String.Empty));}将术语以字符串形式传递给函数以获取结果。双结果=Eval("7*6");结果=Eval("17+4");...您可以使用CodeDom自己创建一个。它会很慢,因为每次调用Eval时都会创建一个新程序集。公共类程序{staticvoidMain(string[]args){Console.WriteLine(ExpressionEvaluator.Eval("(2+2)*2"));}}publicclassExpressionEvaluator{publicstaticdoubleEval(stringexpression){CSharpCodeProvidercodeProvider=newCSharpCodeProvider();CompilerResults结果=codeProvider.CompileAssemblyFromSource(newCompilerParameters(),newstring[]{string.Format(@"namespaceMyAssembly{{publicclassEvaluator{{publicdoubleEval(){{return{0};}}}}}}“,表达)});程序集assembly=results.CompiledAssembly;动态评估器=Activator.CreateInstance(assembly.GetType("MyAssembly.Evaluator"));返回evaluator.Eval();}}OK使用System.Reflection.Emit或System.CodeDom命名空间,但这不是一个好主意,因为没有机制来控制不允许使用哪些命名空间。您编写了一个需要简单表达式的eval(),接下来您知道用户正在起诉您,因为您的代码允许他们输入一个字符串来擦除他们的硬盘驱动器。eval()函数是一个巨大的安全漏洞,应该避免。.Net世界中首选的替代方案是DSL(领域特定语言)。如果你四处搜索,你可以找到一些预构建的DSL,用于诸如算术之类的常见任务。没有原生的C#eval函数;但正如其他人之前所说,您的问题有几种解决方法。如果您对评估更复杂的C#代码感兴趣,我的C#eval程序在运行时提供C#代码的评估并支持许多C#语句。事实上,此代码可用于任何.NET项目,但仅限于使用C#语法。有关更多详细信息,请访问我的网站http://csharp-eval.com。以上是C#学习教程:C#中有eval函数吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: