当前位置: 首页 > news >正文

DynamicExpresso

DynamicExpresso 

动态Expression

安装包:DynamicExpresso.Core 

Student.cs

     

        public class Student
        {
            public int Age { get; set; }
            public string Name { get; set; }

            public void Hello()
            {
                Console.WriteLine(string.Format("hello, my name is {0}, my age is {1}", Name, Age));
            }

            public static Student Instance()
            {
                return new Student() { Name = "auto", Age = 0 };
            }
        }

 

1、生成动态委托

static void Main(string[] args)
{List<Student> students = new List<Student>();for (int i = 0; i < 10; i++){students.Add(new Student{Age = new Random().Next(15, 80),Name = Guid.NewGuid().ToString(),});}string whereExpression = "student.Age > 18 && index >=0";//相当于 students.Where((student, index) => s.Age > 18)var interpreter = new Interpreter();Func<Student, int, bool> dynamicWhere = interpreter.ParseAsDelegate<Func<Student, int, bool>>(whereExpression, "student", "index");//index 为元素索引Expression<Func<Student, int, bool>> dynamicExpressionWhere = interpreter.ParseAsExpression<Func<Student, int, bool>>(whereExpression, "student", "index");// (student, index) => ((student.Age > 18) AndAlso (index >= 0))var value = students.Where(dynamicWhere).ToList();
}

2、调用实体成员

达到类似反射效果

static void Main(string[] args)
{var stu = new Student() { Name = "mango", Age = 30 };var target = new Interpreter().SetVariable("stu", stu);target.Reference(typeof(Student));Console.WriteLine(target.Eval("stu.Hello()"));Console.WriteLine(target.Eval("stu.Name"));Console.WriteLine(target.Eval("new Student().Hello()"));Console.WriteLine(target.Eval("Student.Instance().Hello()"));
}


http://www.mrgr.cn/news/52177.html

相关文章:

  • 在 C# 中通过 JsonConvert.DeserializeObject 将时间戳转换为 DateTime
  • 无团队无资金,洗发水三月热销2600万?
  • 个人用Python复习笔记(待补充)
  • ESP32-C3实现定时器的启停(Arduino IDE)
  • C2. Adjust The Presentation (Hard Version)
  • 【ComfyUI Flux Lora】Flux 开启人物时尚摄影!拒绝胶质感!肤质表现更加细腻且真实!AWPortraitFL
  • 得物iOS函数调用栈及符号化调优实践|得物技术
  • Java中的基本循环结构详解
  • AcWing 861:二分图的最大匹配 ← 匈牙利算法
  • 单细胞分析Seurat使用相关的10个问题答疑精选!
  • 【Vue】项目部署本地部署和服务器部署
  • 机器学习摘下诺奖桂冠
  • javaWeb项目-Springboot+vue-校园论坛系统功能介绍
  • 华为OD机试真题---查找接口成功率最优时间段
  • css-(-webkit-、-moz-、-o-)前缀主要用于CSS和某些HTML属性,确保跨浏览器的兼容性和支持特定的CSS功能
  • 集成测试之我的初步学习与总结
  • 移动云智算平台,斩获两大国际知名设计奖项
  • STM32项目实战:基于STM32F4的智能灯光控制系统(LVGL),附项目教程/源码
  • 一文揭秘|预训练一个72b模型需要多久?
  • 进程间通信 —— 《共享内存》