C#属于静态语言.简而言之,就是通过CLR引入DLR,DLR中包含了表达式树的功能,那么C#代码就具备了将静态代码转换成动态代码的功能.常用于一些运算逻辑的转换.将运算逻辑转换成数据结构缓存到内存中.比如通过表达式树缓存通过反射构建对象的过程...,减少每次调用反射的性能消耗.具体参考DLR官方文档.
1、场景
假设有一个商品促销系统,促销系统的大致原理是维护商品的价格,商品价格会在一系列的促销规则加持下产生变动,大致的硬编码如下:...return price;
}
如上代码能很好的完成需求,但是每个商品的促销活动都大不相同,且商品很多,所以客户提出这个促销活动的具体的扣价规则可以配置.显然上面的代码不满足需求...//促销规则3
rules.Add((price) => price /2);
float price = 20;
rules.ForEach...{0}", price);
Console.ReadKey();
通过这种方式虽然能完成需求,但是这种方式任然需要通过硬编码的方式,显然不可取,且此时的表达式树虽然存储了所有的运算规则