c# 动态表达式

news/2024/11/25 23:22:16/

准备:

创建一个空项目,nuget查找并安装ExpressionEvaluator

示例:

using ExpressionEvaluator;
using System;

 一、计算简单表达式

       public string Test1()
        {
            return SimpleEval("0.1*(Math.Pow(10,2)+20)");
        }


        /// <summary>
        /// 简单数值计算
        /// </summary>
        /// <param name="str">纯表达式</param>
        /// <returns>返回值</returns>
        public  string SimpleEval(string str)
        {
            var types = new TypeRegistry();
            types.RegisterDefaultTypes();

            var expression = new CompiledExpression(str) { TypeRegistry = types };
            var result = expression.Eval();
            Console.WriteLine("简单数值计算: {0}", result);
            return result.ToString();
        }

二、计算复杂表达式

    public class Result
    {
        public double Days { get; set; }
        public double Bonus { get; set; }
    }

        /// <summary>
        /// 变量字段的计算
        /// </summary>
        /// <param name="str"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public   string FieldEval(string str, Object type)
        {
            //注册
            var reg = new TypeRegistry();
            reg.RegisterSymbol("Result", type);
            //如果要使用Math函数,还就注册这个
            //reg.RegisterDefaultTypes();

            //编译
            var p = new CompiledExpression(str) { TypeRegistry = reg };
            p.Compile();

            //计算
            Console.WriteLine("变量字段计算: {0}", p.Eval());
            return p.Eval().ToString();
        }

        public string Test2()
        {
            string[] strFields = new string[] { "Days", "Bonus" };
            string exp = "(Days*10)+(Bonus/2)";
            for (int i = 0; i < strFields.Length; i++)
            {
                if (exp.Contains(strFields[i]))
                {
                    exp = exp.Replace(strFields[i], "Result." + strFields[i]);
                }


            }
            Result re = new Result()
            {
                Days = 200,
                Bonus = 500
            };

            var result = this.FieldEval(exp, re);
            return result;
        }


http://www.ppmy.cn/news/82465.html

相关文章

Spring 中 @NotEmpty、@NotBlank、@NotNull,傻傻分不清楚!

1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.0.5.RELEASE</version> </dependency>NotEmpty、NotBlank、NotNull 包的位置&#xff1…

超声波雷达介绍 ———— 分类介绍

文章目录 介绍安装位置UPAAPA 传感器种类等方性传感器超声波雷达异方性传感器超声波雷达 技术方案模拟式四线式数位二线式数位三线式主动数位 其他密闭式超声波传感器开放式超声波传感器 介绍 超声波的定义 —— 波长短于2cm的机械波称为“超声波”。 超声波属于机械波&#xf…

云服务器部署springboot项目无法访问解决办法

文章目录 部署环境问题解决ipv4和ipv6的问题防火墙的问题 部署环境 在华为云上购买了一个云的ecs服务器安装的centos7.5的操作系统。部署面板采用了宝塔linux。springboot的访问端口为8080。在华为云的安全组规则中配置了8080端口放通。 碰到的问题是&#xff0c;上传了sprin…

服务提供者 Eureka + 服务消费者(Rest + Ribbon)实战

1、Ribbon背景介绍 Ribbon是Netflix发布的开源项目&#xff0c;主要功能是提供客户端的软件负载均衡算法&#xff0c;将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时&#xff0c;重试等。简单来说&#xff0c;就是在配置文件中列出Load B…

《程序员的炫技代码》

程序员&#xff0c;这个职业总是让人感到神秘而又充满魅力。他们手中的代码常常充满了令人惊叹的炫技操作&#xff0c;让人不禁感叹他们的技术能力之高。在这篇文章中&#xff0c;我想和大家分享一些我所知道的程序员的炫技代码。 一行代码实现斐波那契数列 斐波那契数列是一…

从 Oracle 迁移到 TiDB 的方案设计与用户实践

作者 盛玉 &#xff0c; 中国人寿财险金融科技中心系统运行部 王耀强 &#xff0c; PingCAP 资深解决方案架构师 导读 当前&#xff0c;全球数字化浪潮推动数字经济与实体经济融合&#xff0c;更多的企业意识到数据平台对业务增长和创新的重要性。通过国产化迁移和替换数据…

成都PMP培训机构有推荐的吗?

PMP考试是不是必须要报班&#xff1f;自学可以考试吗&#xff1f;不需要报班的话&#xff0c;自学难度大吗&#xff1f;成都PMP培训机构有推荐的吗&#xff1f; 首先&#xff0c;PMP考试并非必须要报班&#xff0c;自学也可以考试。但是需要注意的是&#xff0c;PMP考试难度较大…

小航助学信息学奥赛C++ GoC模拟试卷(含题库答题软件账号)

信息学奥赛C GoC系统请点击 电子学会-全国青少年编程等级考试真题Scratch一级&#xff08;2019年3月&#xff09;在线答题_程序猿下山的博客-CSDN博客_小航答题助手 单选题10.0分 删除编辑 答案:C 第1题goc命令可以通过多命令拼接方式&#xff0c;优化代码布局&#xff0c;…