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的运用。

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

  • 相关阅读:
    pat 1034 Head of a Gang (30分)
    pta坑点
    Devc++ 编译 c++11
    Invitation Cards dijkstra法
    Cube Stacking
    畅通工程
    蚂蚁上树
    洛谷 P1439 【模板】最长公共子序列
    Recursive sequence
    A Simple Math Problem
  • 原文地址:https://www.cnblogs.com/sunshine-wy/p/12767368.html
Copyright © 2011-2022 走看看