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

做外贸网站用哪些小语种福步外贸论坛注册

做外贸网站用哪些小语种,福步外贸论坛注册,wordpress公式,.tech 域名 网站一、什么是表达式目录树 #xff08;1#xff09;Expression我们称为是表达式树#xff0c;是一种数据结构体#xff0c;用于存储需要计算#xff0c;运算的一种结构#xff0c;这种结构可以只是存储#xff0c;而不进行运算。通常表达式目录树是配合Lambda一起来使用的…一、什么是表达式目录树 1Expression我们称为是表达式树是一种数据结构体用于存储需要计算运算的一种结构这种结构可以只是存储而不进行运算。通常表达式目录树是配合Lambda一起来使用的lambda可以是匿名方法当然也可以使用Expression来动态的创建 二、Func与Expression的区别 1、Func是方法 Funcint, int, int func (m, n) m * n 2;Console.WriteLine(func.Invoke(1, 1)); //运算1*123 2、Expression是数据结构 //lambda表达式声明表达式目录树 ExpressionFuncint, int, int exp (m, n) m * n 2; int result exp.Compile().Invoke(1, 2); Console.WriteLine(result); //运算1*224 注意Expression只能为1行如下图会报错 3、使用ILSpy反编译解析看一下 调一下格式更好看一点 ParameterExpression parameterExpression Expression.Parameter(typeof(int), m);ParameterExpression parameterExpression2 Expression.Parameter(typeof(int), n);var multiply Expression.Multiply(parameterExpression, parameterExpression2);var constant Expression.Constant(2,typeof(int));var add Expression.Add(multiply, constant);ExpressionFuncint, int, int exp Expression.LambdaFuncint, int, int(add,new ParameterExpression[2]{parameterExpression, parameterExpression2});打印看看结果 int result exp.Compile().Invoke(11, 12);Console.WriteLine(result); 得到134与m*n2得出结果一致 4、拼装练习 1练习一 2练习二 3练习三 5、动态生成硬编码通用、性能好 需求我希望复制一个People出来 public class People {public int Age;public string Name;}public class PeopleCopy {public int Age;public string Name;} 方法1通过硬编码直接赋值 People people new People() {Age 18,Name 吴彦祖 }; PeopleCopy peopleCopy new PeopleCopy() {Age people.Age,Name people.Name, }; 方法2通过反射赋予 方法3通过Json序列化与反序列化赋值 第一种方法性能最好但是不够通用。方法2和方法3性能不好。 方法4 这时候可以考虑使用表达式目录树来动态生成硬编码 思路用表达目录树动态生成硬编码生成保存到字典里下次再调用的时候则直接从字典里拿。 public class ExpressionMapper{private static Dictionarystring, object _dic new Dictionarystring, object();public static TOut TransTIn, TOut(TIn tIn) {string key string.Format(funckey_{0}_{1}, typeof(TIn).FullName, typeof(TOut).FullName);if (!_dic.ContainsKey(key)){ParameterExpression parameterExpression Expression.Parameter(typeof(TIn), p);ListMemberBinding memberBindingList new ListMemberBinding();foreach (var item in typeof(TOut).GetProperties()){MemberExpression property Expression.Property(parameterExpression, typeof(TIn).GetProperty(item.Name));MemberBinding memberBinding Expression.Bind(item, property);memberBindingList.Add(memberBinding);}foreach (var item in typeof(TOut).GetFields()){MemberExpression field Expression.Field(parameterExpression, typeof(TIn).GetField(item.Name));MemberBinding memberBinding Expression.Bind(item, field);memberBindingList.Add(memberBinding);}MemberInitExpression memberInitExpression Expression.MemberInit(Expression.New(typeof(TOut)), memberBindingList.ToArray());ExpressionFuncTIn, TOut lambda Expression.LambdaFuncTIn, TOut(memberInitExpression, new ParameterExpression[]{parameterExpression});_dic[key] lambda.Compile();}return ((FuncTIn, TOut)_dic[key]).Invoke(tIn);} 方法5泛型缓存相比方法4可以节省读取字典时候的消耗 public class ExpressionGenericMapperTIn, TOut{private static FuncTIn, TOut _Func;static ExpressionGenericMapper(){ParameterExpression parameterExpression Expression.Parameter(typeof(TIn), p);ListMemberBinding memberBindingList new ListMemberBinding();foreach (var item in typeof(TOut).GetProperties()){MemberExpression property Expression.Property(parameterExpression, typeof(TIn).GetProperty(item.Name));MemberBinding memberBinding Expression.Bind(item, property);memberBindingList.Add(memberBinding);}foreach (var item in typeof(TOut).GetFields()){MemberExpression field Expression.Field(parameterExpression, typeof(TIn).GetField(item.Name));MemberBinding memberBinding Expression.Bind(item, field);memberBindingList.Add(memberBinding);}MemberInitExpression memberInitExpression Expression.MemberInit(Expression.New(typeof(TOut)), memberBindingList.ToArray());ExpressionFuncTIn, TOut lambda Expression.LambdaFuncTIn, TOut(memberInitExpression, new ParameterExpression[]{parameterExpression});_Func lambda.Compile();}public static TOut Trans(TIn t) {return _Func(t);} 看一下字典缓存和泛型类缓存消耗的时间明显可以看到通过泛型类缓存的性能更好因为节省了查找字典的性能消耗。 PrintExecutionTime(() {Console.WriteLine(通过字典缓存第一次消耗时间);PeopleCopy copy ExpressionMapper.TransPeople, PeopleCopy(new People() { Age 10, Name 哇哈哈 });});PrintExecutionTime(() {Console.WriteLine(通过字典缓存第二次消耗时间);PeopleCopy copy2 ExpressionMapper.TransPeople, PeopleCopy(new People() { Age 10, Name 哇哈哈 });});PrintExecutionTime(() {Console.WriteLine(通过泛型类缓存第一次消耗时间);PeopleCopy copy3 ExpressionGenericMapperPeople, PeopleCopy.Trans(new People() { Age 11, Name 啦啦啦 });});PrintExecutionTime(() {Console.WriteLine(通过泛型类缓存第二次消耗时间);PeopleCopy copy4 ExpressionGenericMapperPeople, PeopleCopy.Trans(new People() { Age 11, Name 啦啦啦 });}); 5、表达式目录树动态生成的用途 可以用来替代反射因为反射可以通用但是性能不够 可以生成硬编码可以提升性能 6、递归解析表达式目录树 1ExpressionVisitor肯定得递归解析表达式目录树因为不知道深度的一棵树 2只有一个入口叫Visit 3首先检查是个什么类型的表达式然后调用对应的protected virtual 4得到结果继续去检查类型——调用对应的Visit方法——再检测——再调用。。。 案例解析m*n2 第一步把m*n2传入入口时Visit 第二步检测到二元表达式m*n2进入VisitBinary方法. node.Left为m*n这里会再次调用VisitBinary方法    node.Right为2   第三步m*n也时二元表达式因此重新进入VisitBinary方法 node.Left为m进入VisitParameter方法  node.Right为n进入VisitParameter方法 第四步m*n解析完开始解析2会进入VisitConstant方法 基础应用我们可以把表达式的所有号变成-号 从下图可以发现表达式expression变成了m*n-2 7、表达式拼接 using System.Linq.Expressions;namespace ConsoleApp1 {public static class ExpressionExtend{public static ExpressionFuncT, bool AndT(this ExpressionFuncT, bool expr1, ExpressionFuncT,bool expr2) {//return Expression.LambdaFuncT, bool(Expression.AndAlso(expr1.Body, expr2.Body));ParameterExpression newParameter Expression.Parameter(typeof(T), c);NewExpressionVisitor visitor new NewExpressionVisitor(newParameter) ;var left visitor.Replace(expr1.Body);var right visitor.Replace(expr2.Body);var body Expression.And(left, right);return Expression.LambdaFuncT, bool(body, newParameter);}public static ExpressionFuncT, bool OrT(this ExpressionFuncT, bool expr1, ExpressionFuncT, bool expr2) {ParameterExpression newParameter Expression.Parameter(typeof(T), c);NewExpressionVisitor visitor new NewExpressionVisitor(newParameter);var left visitor.Replace(expr1.Body);var right visitor.Replace(expr2.Body);var body Expression.Or(left, right);return Expression.LambdaFuncT, bool(body, newParameter);}public static ExpressionFuncT, bool NotT(this ExpressionFuncT, int expr) {var candidateExpr expr.Parameters[0];var body Expression.Not(expr.Body);return Expression.LambdaFuncT, bool(body, candidateExpr);}}public class NewExpressionVisitor : ExpressionVisitor{public ParameterExpression _NewParameter { get; private set; }public NewExpressionVisitor(ParameterExpression param){this._NewParameter param;}public Expression Replace(Expression exp){return this.Visit(exp);}protected override Expression VisitParameter(ParameterExpression node){return this._NewParameter;}} }public static void Show(){ExpressionFuncPeople, bool lambdal x x.Age 5;ExpressionFuncPeople, bool lambda2 x x.ID 5;ExpressionFuncPeople, bool lambda3 lambdal.And(lambda2);ExpressionFuncPeople, bool lambda4 lambdal.Or(lambda2);ExpressionFuncPeople, bool lambda5 lambdal.Not();var peopleList Do(lambda3);for (int i 0; i peopleList.Count; i){Console.WriteLine(peopleList[i].Name);}}private static ListPeople Do(ExpressionFuncPeople, bool func){ListPeople people new ListPeople(){new People() { ID 1, Age 10, Name 老一 },new People() { ID 2, Age 20, Name 老二 },new People() { ID 3, Age 60, Name 老三 },new People() { ID 4, Age 18, Name 老四 },new People() { ID 5, Age 10, Name 哈哈哈 },new People() { ID 6, Age 15, Name 方式 },new People() { ID 7, Age 10, Name 老六啦啦啦啦啦啦啦 },};return people.Where(func.Compile()).ToList();} 调试成功ID5且age5的只有这两个人。 表达式树也可以通过这种办法进行查询操作
http://www.hkea.cn/news/14298259/

相关文章:

  • 建设淘宝客网站怎么做网站推广平台
  • 安康那个公司做网站好品牌建设工作纪实
  • 做搜索引擎网站论文 网站建设
  • asp网站采集创新的企业网站开发
  • 谷歌收录网站html5经典网站
  • 网站维护主要从哪几个方面做网站建设开发怎么样
  • 为什么网站搜索不到做问卷的几个网站
  • 电子商务网站建设类型小橡皮私人定制app软件
  • 阳山做网站seo网站怎么优化
  • 网站基本设置企业文化墙素材图片
  • 盐田区住房和建设局网站有内涵的公司名字
  • 嘉兴网站建设网站住房城乡建设部门户网站烟气脱硫
  • 湖南变电站公司中企动力技术支持网站建设怎样进入谷歌网站
  • 千岛湖建设集团网站北京西城注册公司
  • 广州seo技术优化网站seo网站申请备案要多久
  • 怎么做电影网站吗做外贸学网站
  • 上海加盟网网站建设国内做网站公司排名
  • 如何建立自己的个人网站petit模板wordpress
  • 网站建设与制作外包服务辽宁建设工程信息网怎么报名
  • 免费网站ppt模板下载网站建设标志图
  • 百度做网站怎么样新闻发稿发布平台
  • 自建网站视频教程网页编辑器中文版
  • 企业网站开发周期网站设计公司要多少钱
  • 苏州无锡市住房和城乡建设局网站关于营销的网站有哪些内容
  • 句容网站开发网站主页设计布局
  • 自己做盗版影视网站哪的网页设计培训好
  • 金华网站建设公司招聘怎么在百度上推广自己
  • 开服网站建设做网站需要交维护费么
  • 商城网站前期准备可以分为( )
  • 内江网站seowordpress导航框架