zoukankan      html  css  js  c++  java
  • c#根据公式进行自动计算的实现

    代码:

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

    namespace Expression
    {
        /// <summary> 
        
    /// 计算表达式的类 
        
    /// </summary> 
        public class CalculateExpression
        {
            /// <summary> 
            
    /// 接受一个string类型的表达式并计算结果,返回一个object对象,静态方法 
            
    /// </summary> 
            
    /// <param name="expression"></param> 
            
    /// <returns></returns> 
            public static object Calculate(string expression)
            {
                string className = "Calc";
                string methodName = "Run";
                expression = expression.Replace("/""*1.0/");

                //设置编译参数
                CompilerParameters paras = new CompilerParameters();
                paras.GenerateExecutable = false;
                paras.GenerateInMemory = true;

                //创建动态代码
                StringBuilder classSource = new StringBuilder();
                classSource.Append("public class " + className + "\n");
                classSource.Append("{\n");
                classSource.Append(" public object " + methodName + "()\n");
                classSource.Append(" {\n");
                classSource.Append(" return " + expression + ";\n");
                classSource.Append(" }\n");
                classSource.Append("}");

                //编译代码
                CompilerResults result = new CSharpCodeProvider().CompileAssemblyFromSource(paras, classSource.ToString());

                //获取编译后的程序集。 
                Assembly assembly = result.CompiledAssembly;

                //动态调用方法。 
                object eval = assembly.CreateInstance(className);
                MethodInfo method = eval.GetType().GetMethod(methodName);
                object reobj = method.Invoke(eval, null);
                GC.Collect();
                return reobj;
            }
        }

    调用:

    object objCalc = Calculate("((1 + 2) * 3 + 6) / 5 ");

    Console.WriteLine(objCalc.ToString());  //结果为3

    Console.ReadLine();

    注意点: 

    1、不支持sin、cos等数学函数

    2、不支持[]、{}等括号和除数字、+、-、*、/以外的字符,建议调用计算函数前进行输入的验证。

    转自:http://hi.baidu.com/programed/item/f43cc6d43c6f3848fa576875 
     


  • 相关阅读:
    mac使用ssh出现permission denied(publickey)
    mac下解压bin文件
    Lint found fatal errors while assembling a release target问题的解决方案
    Cloud Foundry 组件
    maven中的groupId和artifactId到底指的是什么
    SpringBoot之常用注解
    Kafka系列文章
    [转]Kafka 设计与原理详解
    十张图了解Docker【转】
    四层、七层负载均衡的区别
  • 原文地址:https://www.cnblogs.com/zhangpengshou/p/2944387.html
Copyright © 2011-2022 走看看