c#实现Eval的方法有哪些

  介绍

小编给大家分享一下c#实现Eval的方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

一、背景

假如给定一个字符串表达式<代码>“-12 *(- 2.2 + 7.7)- 44 * 2“> 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   null

c#实现Eval的方法有哪些