介绍一、背景
小编给大家分享一下c#实现Eval的方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
一、背景
假如给定一个字符串表达式<代码>“-12 *(- 2.2 + 7.7)- 44 * 2“> 代码,让你计算结果,熟悉JavaScript的都知道有个<代码> Eval 代码>函数可以直接进行计算,而c#中却没有这个函数、下面提供三种实现方式
二、代码
public class Class1 ,,,{ ,,,,,,,# region 方法一:利用CodeCom ,,,,,,,(过时的) ,,,,,,,System.CodeDom.Compiler.ICodeCompiler comp =, new Microsoft.CSharp.CSharpCodeProvider () .CreateCompiler (); ,,,,,,,System.CodeDom.Compiler.CompilerParameters cp =, new System.CodeDom.Compiler.CompilerParameters (); ,,,,,,,public object Eval_1 (string 表达式) ,,,,,,,{ ,,,,,,,,,,,StringBuilder code =, new StringBuilder (); ,,,,,,,,,,,code.Append (“using 系统;,\ n"); ,,,,,,,,,,,code.Append (“namespace ADOGuy  {, \ n"); ,,,,,,,,,,,code.Append (“, public class _Evaluator {, \ n"); ,,,,,,,,,,,code.Append (“, public object __foo (),“); ,,,,,,,,,,,code.Append (“{,“); ,,,,,,,,,,,code.AppendFormat (“, return ({0});,,,,表达式); ,,,,,,,,,,,code.Append (“} \ n"); ,,,,,,,,,,,code.Append (“},}“); ,,,,,,,,,,,System.CodeDom.Compiler.CompilerResults cr =, comp.CompileAssemblyFromSource (cp, code.ToString ()); ,,,,,,,,,,,System.Reflection.Assembly a =, cr.CompiledAssembly; ,,,,,,,,,,,object _Compiled =, a.CreateInstance (“ADOGuy._Evaluator"); ,,,,,,,,,,,System.Reflection.MethodInfo mi =, _Compiled.GetType () .GetMethod (“__foo"); ,,,,,,,,,,,return mi.Invoke (_Compiled, null); ,,,,,,,} ,,,,,,,# endregion ,,,,,,,# region 方法二:对表达式分析 ,,,,,,,string 之前(string p, string 问) ,,,,,,,{ ,,,,,,,,,,,switch (p) ,,,,,,,,,,,{ ,,,,,,,,,,,,,,,case “+“: ,,,,,,,,,,,,,,,case “产生绯闻; ,,,,,,,,,,,,,,,,,,,return (“*/(“.IndexOf (q), !=, 1), ?,“& lt;“,:,“,在”; ,,,,,,,,,,,,,,,case “*”: ,,,,,,,,,,,,,,,case “/? ,,,,,,,,,,,,,,,,,,,return (q ==,“(“), ?,“& lt;“,:,“,在”; ,,,,,,,,,,,,,,,case “(“: ,,,,,,,,,,,,,,,,,,,return (==q “)“), ?,“=?:,“& lt;“; ,,,,,,,,,,,,,,,case “)”: null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullc#实现Eval的方法有哪些