我已经解决了,以下是解决的类的详细信息:

如果在文本框中输入简单的数学计算式:200+100*290之类的计算式,如何计算出他们的值:

using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Text;
using System.Reflection;

namespace ADOGuy
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    public class Evaluator
    {

        public Evaluator(EvaluatorItem[] items)
        {
            ConstructEvaluator(items);
        }

        public Evaluator(Type returnType, string expression, string name)
        {
            EvaluatorItem[] items = { new EvaluatorItem(returnType, expression, name) };
            ConstructEvaluator(items);
        }

        public Evaluator(EvaluatorItem item)
        {
            EvaluatorItem[] items = { item };
            ConstructEvaluator(items);
        }

        private void ConstructEvaluator(EvaluatorItem[] items)
        {
            ICodeCompiler comp = (new CSharpCodeProvider().CreateCompiler());
            CompilerParameters cp = new CompilerParameters();
            cp.ReferencedAssemblies.Add("system.dll");
            cp.ReferencedAssemblies.Add("system.data.dll");
            cp.ReferencedAssemblies.Add("system.xml.dll");
            cp.GenerateExecutable = false;
            cp.GenerateInMemory = true;

            StringBuilder code = new StringBuilder();
            code.Append("using System; \n");
            code.Append("using System.Data; \n");
            code.Append("using System.Data.SqlClient; \n");
            code.Append("using System.Data.OleDb; \n");
            code.Append("using System.Xml; \n");
            code.Append("namespace ADOGuy { \n");
            code.Append("  public class _Evaluator { \n");
            foreach(EvaluatorItem item in items)
            {
                code.AppendFormat("    public {0} {1}() ",
                    item.ReturnType.Name,
                    item.Name);
                code.Append("{ ");
                code.AppendFormat("      return ({0}); ", item.Expression);
                code.Append("}\n");
            }
            code.Append("} }");

            CompilerResults cr = comp.CompileAssemblyFromSource(cp, code.ToString());
            if (cr.Errors.HasErrors)
            {
                StringBuilder error = new StringBuilder();
                error.Append("Error Compiling Expression: ");
                foreach (CompilerError err in cr.Errors)
                {
                    error.AppendFormat("{0}\n", err.ErrorText);
                }
                throw new Exception("Error Compiling Expression: " + error.ToString());
            }
            Assembly a = cr.CompiledAssembly;
            _Compiled = a.CreateInstance("ADOGuy._Evaluator");
        }

        public int EvaluateInt(string name)
        {
            return (int) Evaluate(name);
        }

        public string EvaluateString(string name)
        {
            return (string) Evaluate(name);
        }

        public bool EvaluateBool(string name)
        {
            return (bool) Evaluate(name);
        }

        public object Evaluate(string name)
        {
            MethodInfo mi = _Compiled.GetType().GetMethod(name);
            return mi.Invoke(_Compiled, null);
        }

        static public int EvaluateToInteger(string code)
        {
            Evaluator eval = new Evaluator(typeof(int), code, staticMethodName);
            return (int) eval.Evaluate(staticMethodName);
        }

        static public string EvaluateToString(string code)
        {
            Evaluator eval = new Evaluator(typeof(string), code, staticMethodName);
            return (string) eval.Evaluate(staticMethodName);
        }
    
        static public bool EvaluateToBool(string code)
        {
            Evaluator eval = new Evaluator(typeof(bool), code, staticMethodName);
            return (bool) eval.Evaluate(staticMethodName);
        }

        static public object EvaluateToObject(string code)
        {
            Evaluator eval = new Evaluator(typeof(object), code, staticMethodName);
            return eval.Evaluate(staticMethodName);
        }

        const string staticMethodName = "__foo";
        Type _CompiledType = null;
        object _Compiled = null;

    }//CLASS

    public class EvaluatorItem
    {
        public EvaluatorItem(Type returnType, string expression, string name)
        {
            ReturnType = returnType;
            Expression = expression;
            Name = name;
        }

        public Type ReturnType;
        public string Name;
        public string Expression;
    }//CLASS
}//NAMESPACE
 

时间: 2024-11-01 04:48:08

我已经解决了,以下是解决的类的详细信息:的相关文章

解决PHP4.0 和 PHP5.0类构造函数的兼容问题

以下是对解决PHP4.0和PHP5.0类构造函数兼容问题的方法进行了详细的分析介绍,需要的朋友可以过来参考一下   在 PHP5.0 以上版本里,还兼容了 4.0 版本的构造函数的定义规则.如果同时定义了4.0的构造函数和 __construct()函数,则__construct() 函数优先. 为了使类代码同时兼容 PHP4.0 和 5.0,可以采取以下的方式: 复制代码 代码如下: <?php class MyClass {  function __construct() { //for P

sqlserver-附加数据库时出错.有关详细信息 请单击 消息 列中的超链接解决思

问题描述 附加数据库时出错.有关详细信息 请单击 消息 列中的超链接解决思 这个是消息的内容 附加数据库 对于 服务器"HP-HPSQLEXPRESS"失败. (Microsoft.SqlServer.Smo) 其他信息: 执行 Transact-SQL 语句或批处理时发生了异常. (Microsoft.SqlServer.ConnectionInfo) 无法打开物理文件"D:11111111宿舍管理-项目xxxsuzheguanli_Data.MDF".操作系统错

网站建设问题-网站用户登录,重试/耗时。请问各位大神刚怎么解决。有赏解决。

问题描述 网站用户登录,重试/耗时.请问各位大神刚怎么解决.有赏解决. 网站前台用户登录的时候,一直线显示"第N次重试,登录耗时NN秒"账号密码确定无错,就这样,就算重试1000遍+还登录不进去.又不显示错误,请哪位高手能帮忙解决一下!!大谢!! 要看代码解决的大神留下QQ或者加我QQ:296324087 另外我查了一下,貌似有人说问题出在验证码这边,可能是代码中的"Session("GetCode") = mCode.Create() ' 将验证码存到S

Extjs列表详细信息窗口新建后自动加载解决方法_extjs

在Extjs中,在当前页面的grid页新建了一行数据后,通过表单形式进入详细页面的编辑,此时,为了能让页面自动打开详细页面编辑,我花了三个小时,终于找到了在Extjs下最合适的方案,结果却只有三句话,我想,这可能也是很多Extjs爱好者们想要知道或者已经知道的,为此,将其与大家分享,只求为extjs群体贡献自己的一些想法. 列表在创建后,一般会有一个提示,现在我把我最开始的几个思路与大家讲讲,想直接看结果的可以跳到最后一套方案~ 方案1(放弃). 在新建数据后,向createform方法传送一个

mysql忘记root密码解决方法和10061解决方法

  如果忘记了 MySQL 的 root 密码,可以用以下方法重新设置: 1. KILL掉系统里的MySQL进程; 2. 用以下命令启动MySQL,以不检查权限的方式启动; mysqld_safe -skip-grant-tables & 3. 然后用空密码方式使用root用户登录 MySQL; mysql -u root 4. 修改root用户的密码; mysql> update mysql.user set password=PASSWORD('新密码') where User='roo

求解决-求大神解决,尤其是那个递增的阶乘那里请解释一下,谢谢

问题描述 求大神解决,尤其是那个递增的阶乘那里请解释一下,谢谢 本题要求实现一个函数,用下列公式求cos(x)cos (x)cos(x)的近似值,精确到最后一项的绝对值小于eee: cos(x)=x0/0!?x2/2!+x4/4!?x6/6!+?cos (x) = x^0 / 0! - x^2 / 2! + x^4 / 4! - x^6 / 6! + cdotscos(x)=x ?0 ??/0!?x ?2 ??/2!+x ?4 ??/4!?x ?6 ??/6!+? 函数接口定义: double

高手们,帮忙解决下,关于.net中的类的作用,,肯定对于你们来说很简单,但我现在有点不明白,谢谢

问题描述 各位高手们好现在学习.net,,看了一些关于类..继承..抽像呀...接口...方面的知识.然后自己就有点想不通了..为什么要用类呀...如果是做网站的话..也就是处理数据呀..不就是把数据..添加到数据库..增..删..改..查一些相关操作.还有就是一些数据与数据之间的关系..但是现在碰到类..继承..多态..抽像类呀..接口..等等这些..在程序.怎么用呀..他的好处是什么,为什么要用.这些..请高手们帮小弟解决一下.思想上的障碍,谢谢,,, 解决方案 解决方案二:如果系统复杂了.

EXTJS2.2中输入框边框显示不完整解决思路,一级解决办法。

同事在使用ExtJs时发现如下Bug:表单当中的元素,出现文本框参差不齐,有的没有边框等,不美观:输入框显示不完整,抓狂. 分析步骤及解决思路如下:    1.使用IE的F12功能,获取生成的输入框HTML脚本,关键点脚本如下.<pre><br><DIV style="PADDING-LEFT: 15px;background:blue" class=x-form-element><INPUT class="x-form-text&q

第一次很认真很认真的做一件事,但是就卡在这里了,找了很多方法都没有成功,最后的希望全在这里了,希望好心人帮忙解决一些,您的几分钟有可能解决我几天都解决不了的问题

问题描述 我们学校的教务在线是gbk解码,但wp不支持,网上说用getGDCCEcoding可以解决,但在wp上报"System.Type"不包含"Assembly"的定义,并且找不到可接受类型为"System.Type"的第一个参数的扩展方法"Assembly"(是否缺少using指令或程序集引,第一次很认真的学习一门技术,希望有好心人帮忙解决,有可能您花上几分钟的事,可能解决困恼我好几天都解决不了的问题 解决方案 解决方案