c# 动态表达式

这篇具有很好参考价值的文章主要介绍了c# 动态表达式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

准备:

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

c# 动态表达式

示例:

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;
        }文章来源地址https://www.toymoban.com/news/detail-469669.html

到了这里,关于c# 动态表达式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#正则表达式的使用

    如果不引用则写成 System.Text.RegularExpressions.Regex 使用方法如下: 符号 含义 d 0-9的数字 D d的补集,所有非数字的字符(同[^0-9]) w 单词字符,指大小写字母、0-9数字、下划线 W w的补集 s 空白字符,包括换行符n、回车符r、制表符t、垂直制表符v、换页符f S s的补集

    2024年02月08日
    浏览(63)
  • C# 正则表达式(Regex类)

    正则表达式是由普通字符(如英文字母)以及特殊字符(也称为元字符)组成的一种文字模式 这种文字模式可用于检查字符串的值是否满足一定的规则,例如: 验证输入的邮箱是否合法 输入的身份证号码是否合法 输入的用户名是否满足条件等 也可以进行字符串的替换和提

    2023年04月22日
    浏览(38)
  • .NET写一个自己的Lambda表达式与表达式树

    LambdaExpression继承Expression Expression 又继承LambdaExpressio 所以,LambdaExpression与 Expression 的区别在于:泛型类以静态类型的方法标识了它是什么种类的表达式,也就是说,他确定了返回类型和参数。所以显然,TDelegate必须是一个委托类型。 注意 :并非所有的Lambda表达式都能转换成

    2024年02月13日
    浏览(46)
  • C# 匿名方法和Lambda表达式

    1.匿名方法的演变 匿名方法是为了简化委托的实现,方便调用委托方法而出现的,同时,匿名方法也是学好lambda表达式的基础。在委托调用的方法中,如果方法只被调用一次,这个时候我们就没有必要创建具名方法,从而用匿名方法更为方便。 下面一段代码是声明并使用了一

    2024年02月15日
    浏览(44)
  • c#中lambda表达式缩写推演

     

    2024年02月12日
    浏览(35)
  • C# LINQ和Lambda表达式对照

    Linq语法: Lamda语法: sql语法: Linq语法: Lamda语法: sql语法: Linq语法: Lamda语法: sql语法: ​ Linq语法: Lamda语法: sql语法: ​ Linq语法: Lamda语法: sql语法: ​ Linq语法: Lamda语法: sql语法: Linq语法: Lamda语法: sql语法: ​ Linq语法: Lamda语法: EF Core中的写法:

    2024年02月16日
    浏览(36)
  • 三、C#—变量,表达式,运算符(3)

    变量名能不能用汉字? 全局变量 局部变量 错误1 错误2 错误3 2.2.1 值类型直接存储值 例如: 2.2.2 简单类型 2.2.3 整数类型 例如: 2.2.4 浮点类型 2.2.5 decimal 类型 注意: 定义decimal变量时的问题 2.2.6 bool类型 2.3.1 引用类型存储对值得引用 2.3.2 Object 类 不区分大小写得限制 2.3.3

    2024年02月09日
    浏览(46)
  • 记录一个正则表达式

    至少 8 个字符; 至少包含一个小写英文字母; 至少包含一个大写英文字母; 至少包含一个数字; 至少包含一个特殊字符,特殊字符为:“!@#$%^*()-+” 中的一个; 不包含2个连续相同的字符; 不包含连续数字,如:12345;

    2024年02月13日
    浏览(39)
  • jexl3动态计算表达式

    Java Expression Language (JEXL) 是一个表达式语言引擎,可以用来在应用或者框架中使用。JEXL 受Velocity 和 JSP 标签库 1.1 (JSTL) 的影响而产生的。需要注意的是, JEXL 并不是 JSTL 中的表达式语言的实现。 实时引擎里 动态逻辑计算分离 计算逻辑经常变化或者可视化逻辑配置 引入JAR包

    2024年02月11日
    浏览(44)
  • 【C# Programming】委托和lambda表达式、事件

    目录 一、委托和lambda表达式 1.1 委托概述 1.2 委托类型的声明 1.3 委托的实例化 1.4 委托的内部机制  1.5 Lambda 表达式 1.6 语句lambda 1.7 表达式lambda 1.8 Lambda表达式 1.9 通用的委托 1.10 委托没有结构相等性 1.11 Lambda表达式和匿名方法的内部机制 1.12 外部变量 1.13 外部变量的

    2024年02月06日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包