zoukankan      html  css  js  c++  java
  • Expression 表达树的使用

      通常我们在调用一个方法时我们可以传递不同类型的参数,比如int、string、list集合等,但是我们观察C#里的一些方法就会发现比如linq里面的Where,里面的参数是以Lambda表达式来传入的,那么我们自定义的方法如何也借用这种方式去实现呢?如下:

      OrderCountModel GetSqlListCountForMob<T>(string userId, List<Expression<Func<T_O_Conv_HeaderModel, bool>>> expWhereList, Expression<Func<T_O_Conv_HeaderModel, T>> expOrder);

      我们定义了一个名为GetSqlListCountForMob的方法,返回一个OrderCountModel,改方法的输出参数依次是userid、Lambda表达式、Lambda表达式,其中Lambda表达式内部使用对象是T_O_Conv_HeaderModel类型,第一个表达式第二个参数返回bool类型,第二个表达式第二个参数返回泛型T。

      我们再来看看调用:

      

       外层调用时使用表达式参数即可,如p=>p.OrderStates==1。这里我外层包了list存了多个lambda,原理是同样的,底层会遍历集合。

      顺带说一下泛型T,存在我们使用表达式时不确定表达式里返回的实际类型, 因此我们在定义时可以用泛型T指定,细看第二个表达式的定义,结构是:

        方法名<T>(Expression<Func<T_O_Conv_HeaderModel, T>)

      如此便可完成很多公共方法的设计,很实用,尤其是对泛型T的运用。

      以上,小计一下,方便后续查阅。

  • 相关阅读:
    项目目标文档
    河北省民间组织管理系统项目分析
    《探索需求》读书笔记一
    “花儿日记”项目总结
    2015年秋季个人阅读计划
    场景调研
    “数组最大值求和”结对情况
    课堂改进意见
    《梦断代码》阅读笔记三
    linux io 学习笔记(03)---共享内存,信号灯,消息队列
  • 原文地址:https://www.cnblogs.com/sunshine-wy/p/12767368.html
Copyright © 2011-2022 走看看